본문 바로가기

스택10

[백준/C,C++] 17298번: 오큰수 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 로직 자체는 크게 어렵지 않을 거 같았는데 정답률이 많이 낮아 의아해하다가 시간 초과로 한번 틀린 후 꽤 어려운 문제라는 걸 알았습니다. 혼자 고민을 좀 해보다 힌트를 조금 찾아본 후 풀었는데, 쉽지 않았던 문제였습니다. 예제 입력으로 먼저 예를 들어 보면 스택에 3, 5, 2, 7이 push되어 있는 상태입니다. 각 인덱스 0, 1, 2, 3의 오큰수를 찾아야하는데 인덱스를 저장할 벡터를 하나 더 만든 후 오큰수를 찾게 되.. 2021. 3. 3.
[백준/C,C++] 1874번: 스택 수열 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 1씩 증가하는 자연수를 푸쉬할 수 있는 스택으로 주어진 수열을 만들 수 있는가에 대한 문제입니다. 예제로 주어진 4, 3, 6, 8, 7, 5, 2, 1의 경우 1, 2, 3, 4를 차례로 push하고 pop을 2번 하면 4, 3이 출력됩니다. 이후 5, 6을 push하고 pop을 1번 하여 6을 출력, 7, 8을 push~.. .. 2021. 3. 3.
[백준/C,C++] 4949번: 균형잡힌 세상 www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마 www.acmicpc.net 괄호 문제인 9012번 문제의 업그레이드 버전입니다. 이 문제 또한 스택으로 간단하게 풀 수 있는 문제인데요. 평소 괄호를 사용할 때 어떤 식으로 열고 닫는지 생각해보면 금방 로직을 짤 수 있습니다. 괄호를 닫을 땐 마지막에 열린 괄호와 짝이 맞아야 하며 모든 괄호는 서로 짝을 이루고 있어야 합니다. 문자열 중 '(' 또는 '['가 등장한다면 괄호를 여는 부분이므로 스택에 push를 해주고 ')'.. 2021. 3. 3.
[백준/C,C++] 9012번: 괄호 www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 흔히 쓰는 괄호가 제대로 열리고 닫혔는지 판단하는 문제입니다. '('가 push, ')'가 pop이라고 생각하면 풀기 수월한 문제입니다. 즉 스택이 비었을때 pop을 하거나 push, pop이 끝난 스택의 사이즈가 0이 아니면 vps가 아닙니다. 그것을 코드로 구현하면.. 아래와 같은 함수를 만들 수 있습니다. void vps(string str, int len) { int sta.. 2021. 3. 2.