공부/백준

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

BeepMaeae 2025. 5. 5. 15:44

 

 

문제 링크

https://www.acmicpc.net/problem/2841

 

 

솔직히 대학생이 되고 읽은 책이라곤 전공 책 밖에 없다보니 어휘력이 떨어졌다는 걸 체감하는 시간이었다 ... 코드 짜는데는 진짜 얼마 안 걸렸는데 문제를 파악하는데 많은 시간을 소요했다.

 

Stack을 6개(줄 만큼) 생성한 뒤, 줄 별로 데이터를 관리해준다.

새로 누를 프랫이 누르고 있는 프랫 중 가장 큰 값(가장 오른쪽에 있는 값)보다 클 경우에는 그 프랫을 추가해주기만 하면 된다.

새로 누를 프랫이 누르고 있는 프랫보다 작을 경우, 그 프랫보다 더 큰 프랫을 모두 떼야 한다. while문을 써서 조건을 만족할 때까지 pop을 해주자.

 

stack이 비어있을 경우에는 무조건 append를 해야 한다는 사소한 사실을 잊지 않도록 하자. (내가 잊었었다.) 

import sys

n, p = map(int, sys.stdin.readline().split())
stack = [[] for _ in range(6)]
cnt = 0

for i in range(n):
    a, b = map(int, sys.stdin.readline().split())
    
    # 현재 줄의 스택이 비어있지 않고, 누르고 있는 프렛이 입력받은 프렛(b)보다 클 때
    while stack[a-1] and b < stack[a-1][-1]:
        stack[a-1].pop()
        cnt += 1
    
    # 스택이 비어있거나, 현재 누른 프렛이 스택의 마지막 프렛보다 클 때
    if not stack[a-1] or b > stack[a-1][-1]:
        stack[a-1].append(b)
        cnt += 1

print(cnt)

 

지금 보니까 외계인이 상근이 상상 친구였네 ... 상근이가 상상력이 뛰어나다.

'공부 > 백준' 카테고리의 다른 글

[Python] 3015: 오아시스 재결합  (0) 2025.05.05
[Python] 1918: 후위 표기식  (0) 2025.05.05
[Python] 3986: 좋은 단어  (0) 2025.05.05
[Python] 10799: 쇠막대기  (0) 2025.05.05