Stack 6

[Python] 3015: 오아시스 재결합

문제 링크https://www.acmicpc.net/problem/3015 일단 해당 문제의 티어를 보지 않고 무작정 덤빈 과거의 나에게 분노를 표한다. Grrrr 처음 봤을 때 드는 생각은 당연히 이중 for문을 돌려서 i와 j번째 사람의 키를 비교하는 것. 답은 당연히 나오겠지만 안 봐도 시간 초과가 나올 것이다. 따라서 기각. 그 다음 든 생각은, 어차피 키가 작은 사람 다음에 그 사람보다 키가 큰 사람이 있다면, 그 뒤에 다른 사람은 그 사람을 절대로 볼 수 없다. 그래서 Stack에 사람들의 키를 저장하며 단순 1만큼 카운트하다, 키가 큰 사람이 들어오면 그 사람보다 키가 작은 사람을 모두 pop해서 단순 1 카운트 + 그만큼 카운트를 세는 것이다. 그런데 문제가 있었다. 바로 '키가 같은 사..

공부/백준 2025.05.05

[Python] 1918: 후위 표기식

문제 링크https://www.acmicpc.net/problem/1918 후위 표기식의 경우 개인적으로 Stack의 정수라고 보기 때문에 이야기를 조금 하고 넘어가겠다. 3 + 5 * 7처럼 우리가 실생활에서 사용하는 표기식은 '중위 표기식'이라고 한다.3 5 7 * + 처럼 숫자가 앞, 수식이 뒤에 있는 표기식은 '후위 표기식'이라고 한다. 뭐 어떻게 봐야되는지도 모르겠고, 복잡해보이기만 하는 후위 표기식을 왜 사용하는 것일까? 우리는 인간이기 때문에 5*7을 먼저 해야 한다는 사실을 알고 있다. 하지만 컴퓨터는 선형적으로 데이터를 읽기 때문에 해당 방식을 사용하는 것을 비효율적이다. 우리는 컴퓨터가 더 빠르고 효율적으로 계산을 할 수 있도록 Stack을 이용해서 중위 표기식을 후위 표기식으로 변환..

공부/백준 2025.05.05

[Python] 2841: 외계인의 기타 연주

문제 링크https://www.acmicpc.net/problem/2841 솔직히 대학생이 되고 읽은 책이라곤 전공 책 밖에 없다보니 어휘력이 떨어졌다는 걸 체감하는 시간이었다 ... 코드 짜는데는 진짜 얼마 안 걸렸는데 문제를 파악하는데 많은 시간을 소요했다. Stack을 6개(줄 만큼) 생성한 뒤, 줄 별로 데이터를 관리해준다.새로 누를 프랫이 누르고 있는 프랫 중 가장 큰 값(가장 오른쪽에 있는 값)보다 클 경우에는 그 프랫을 추가해주기만 하면 된다.새로 누를 프랫이 누르고 있는 프랫보다 작을 경우, 그 프랫보다 더 큰 프랫을 모두 떼야 한다. while문을 써서 조건을 만족할 때까지 pop을 해주자. stack이 비어있을 경우에는 무조건 append를 해야 한다는 사소한 사실을 잊지 않도록 하자..

공부/백준 2025.05.05

[Python] 3986: 좋은 단어

문제 링크https://www.acmicpc.net/problem/3986 선이 교차하지 않아야 한다는 조건만 정확하게 파악한다면 쉽게 풀 수 있는 문제다. 1. 연속된 문자들을 제거하고 봤을 때도 연속된 문자가 있어야 한다.2. 문자가 끝났을 때 쌍을 이루지 못하는 문자가 남아있으면 안 된다. Stack을 이용해서 첫 문자 또는 연속하지 않는 문자를 push해주고, 연속되면 pop으로 빼주면 되는 쉬운 문제가 된다.n = int(input())cnt = 0for _ in range(n): stack = [] str = list(input()) for i in str: if not len(stack): # 스택이 비었으면 추가 stack.append(..

공부/백준 2025.05.05

[Python] 10799: 쇠막대기

문제 링크https://www.acmicpc.net/problem/10799 기본적인 아이디어는 다음과 같았다. 1. 열린 괄호 '('가 나오면 Stack에 push한다.2. 닫힌 괄호 ')'가 나오면 Stack에 있던 '('를 pop한 뒤, 코드를 잘~ 짜서 개수를 세어준다. 다만 이렇게만 할 수 있다면 아마 9012번 괄호 문제와 다름 없었을 것이다. 고려해야 될 사항은 괄호가 나왔을 때 경우의 수가 2가지라는 것이다. 1. 해당 괄호가 레이저일 경우 직전 문자가 열린 괄호, 그 다음 문자가 닫힌 괄호인 경우이다. 이 경우에는 일단 닫힌 괄호에 대응되는 열린 괄호를 Stack에서 pop해주고, 현재 Stack에 저장하고 있는 열린 괄호의 개수만큼 조각이 생긴다. 2. 해당 괄호가 쇠..

공부/백준 2025.05.05

스터디 1주차 - Stack (자료구조)

사실 자료구조를 수강한지는 한 학기, 스터디를 시작한지는 2개월이 지났지만 여태까지 배운 것들에 대한 정리를 하나도 안 하고 있었기 때문에 ... 지금부터라도 내가 했던 걸 조금씩 기록하려고 한다. 아무튼 자료구조 시간에 배웠던 Stack을 사용하는 문제들을 실제로 풀어보기 위해 Stack에 대한 것을 다시 복습해봤다. Stack이란 제한적으로 접근할 수 있는 나열 구조이며, Last In, First Out 방식을 사용하기 때문에 '가장 끝 원소'에 대해서만 접근할 수 있다.예를 들어 A라는 데이터가 있는 Stack이 존재했다고 가정해보자. B, C가 차례로 Stack에 들어온다면, 그 뒤 내가 직접적으로 접근할 수 있는 데이터(예를 들어 데이터를 삭제한다든가)는 C다. 나중에 들어온 데이터가 무조건 ..