Stack 8

[BOJ 4949] 균형잡힌 세상 (Java)

문제 https://www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마 www.acmicpc.net So when I die (the [first] I will see in (heaven) is a score list). [ first in ] ( first out ). Half Moon tonight (At least it is better than no Moon at all]. A rope may form )( a trail in a maze. Help( I[m being..

[BOJ 9012] 괄호 (Java)

문제 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 풀이 Stack의 대표문제 '(' 는 Stack에 넣고, ')' 가 나오면 Stack top이 '(' 일 경우 top을 pop한다. 모든 순회가 끝난 후 Stack이 비어있다면 올바른 괄호이다. 아래 문제와 유사하다. 2021.10.18 - [Problem Solving/Programmers] - [프로그래머스] 올바른 괄호 (Java) [프로그래머스] 올바른 ..

[BOJ 17298] 오큰수 (Java)

문제 https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 풀이 Stack을 이용 풀었다. 뒤에서부터 순회하며 Stack에 넣을건데 먼저 Stack의 top을 체크하면서 현재 원소보다 작으면 pop을 해준다. (현재 원소 보다 큰 값이 나올때까지) 이후 Stack이 empty 상태라면 현재 원소보다 큰 수가 없는 것이므로 -1을 저장 Stack의 사이즈가 1이상이라면 Stack의 top이 현재 원소의 오큰수이므로 저장한다. 마지막으로 현재 원소를 Stack에 ..

[BOJ 6549] 히스토그램에서 가장 큰 직사각형 (Java)

#문제 https://www.acmicpc.net/problem/6549 6549번: 히스토그램에서 가장 큰 직사각형 입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤ www.acmicpc.net #풀이 Stack을 이용하여 풀었다. 순서대로 Stack에 막대바의 height, index 정보를 push하면서, 만약 현재 막대바의 height가 Stack의 top원소보다 작을 경우 Stack의 원소를 pop하면서 넓이를 계산해준다. #소스코드 package stack; import java.io.BufferedReader; i..

[프로그래머스] 괄호 회전하기 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr #소스코드 import java.util.*; class Solution { public boolean isRight(char[] arr){ Stack st = new Stack(); for(int i = 0; i < arr.length; i++){ char cur = arr[i]; if(i == 0) { // 첫 번째 문자가 닫는 괄호일 경우 바로 false 리턴 if(cur == ']' || cur == '}' || cur == ')') return false; // 첫 번째 문자는 일단 Stack에 넣는다. st.push(cu..

[프로그래머스] 짝지어 제거하기 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는..

[프로그래머스] 올바른 괄호 (Java)

#문제 https://programmers.co.kr/learn/courses/30/lessons/12909 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr #소스코드 import java.util.Stack; class Solution { boolean solution(String s) { boolean answer = true; Stack st = new Stack(); for(int i = 0; i < s.length(); i++){ char elem = s...

[BOJ 1874] 스택 수열 (Java)

#문제 https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net #소스코드 package stack; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.Link..