[백준 2841] 외계인의 기타 연주

김태민·2026년 4월 14일


최종 코드

import sys
input = sys.stdin.readline
n, p = map(int, input().split())

melody = []
for _ in range(n):
  row = list(map(int, input().split()))
  melody.append(row)

stack = []
stack1 = []
stack2 = []
stack3 = []
stack4 = []
stack5 = []
stack6 = []
count = 0

for i in range(len(melody)):
  line = melody[i][0]
  fret = melody[i][1]
  
  if(line == 1):
    stack = stack1
  elif(line == 2):
    stack = stack2
  elif(line == 3):
    stack = stack3
  elif(line == 4):
    stack = stack4
  elif(line == 5):
    stack = stack5
  elif(line == 6):
    stack = stack6

  # 크게 세 가지 케이스가 있는데
  # 하나는 기존에 있던 것 fret 보다 값이 작아서 손을 떼야 함
  # 하나는 손을 떼지 않고 새로 누름
  # 하나는 기존에 누르고 있었어서 손만 똄

  # 이게 떼는 로직
  while(len(stack) > 0 and stack[-1] > fret):
    stack.pop()
    count += 1
  # 뗴다가 같은 음이면?
  if(len(stack) > 0 and stack[-1] == fret):
    continue
  # 그래서 기존보다 크면?
  else:
    stack.append(fret)
    count += 1
print(count)

사실 최종 제출에서 문제가 한 번 생겼는데, 시간 초과 에러가 한 번 있었다.

혹시 큰 값들을 입출력 해서 그런건가? 해서

import sys
input = sys.stdin.readline

이 코드를 추가해주니 성공했다.

계속 input만 사용했는데, 앞으로는 반드시 표준 입출력을 사용해야겠다!

profile
빠르게 성장하는 개발자

0개의 댓글