728x90
https://www.acmicpc.net/problem/2841
import sys
n, p = map(int, sys.stdin.readline().split())
melody = [ list(map(int, sys.stdin.readline().split())) for _ in range(n) ] #1
cnt = 0
guitar = [ [] for i in range(7) ] #2
for line, plot in melody: #3
if not guitar[line]: #4
guitar[line].append(plot)
cnt += 1
else: #5
if guitar[line][-1] < plot: #6
guitar[line].append(plot)
cnt += 1
elif guitar[line][-1] > plot: #7
while True:
if not guitar[line] or guitar[line][-1] < plot: #8
guitar[line].append(plot)
cnt += 1
break
elif plot == guitar[line][-1]: #9
break
else: #10
guitar[line].pop()
cnt += 1
print(cnt)
#1 : 멜로디 입력
#2 : 기타는 1~6번 줄까지 있다고 했으니 7개의 스택 생성
#3 : 입력받은 멜로디에서 line와 plot을 꺼냄
#4 : 줄에 프롯이 없을 때 줄의 번호를 인덱스로 하는 스택에 plot 삽입
#5 : 줄 번호 스택에 이미 plot이 있는 경우
#6 : 스택의 가장 위 원소가 plot보다 작으면 plot 삽입하고 cnt +1
#7 : 스택에 있는 원소가 plot보다 큰 경우
#8 : 반복문을 돌리는데 스택이 비어있거나 스택의 top원소가 plot보다 작으면 plot 삽입하고 cnt +1 하고 break
#9 : plot과 스택의 top원소가 같으면 break
#10 : #7이 성립하고 #8, 9에도 걸리지 않으면 스택의 원소들을 계속 빼주고 cnt +1
스택을 여러개 만들어서 사용하는 방법은 이전에 2중 스택 문제를 풀어봤었지만 이번처럼 기타의 줄의 개수만큼 스택을 만들어서 구분하는 건 처음이다.
새로운 유형 + 이런저런 구현 + 불친절한 예제 설명이 합쳐져서 나한텐 체감 난이도가 높았다.
더 열심히 하는 수밖엔 없는것 같다.
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 4889 파이썬(python) : 안정적인 문자열 - 개수 세기 (0) | 2022.07.22 |
---|---|
[백준] 12605 파이썬(python) : 단어순서 뒤집기 (0) | 2022.07.22 |
[백준] 17608 파이썬(python) : 막대기 (0) | 2022.07.22 |
[백준] 5397 파이썬(python) : 키로거 - 이중stack (0) | 2022.07.21 |
[백준] 3986 파이썬(python) : 좋은 단어 (0) | 2022.07.21 |