[Python] BOJ 2841 - 외계인의 기타 연주(GITARA)
728x90
반응형
https://www.acmicpc.net/problem/2841
# 스택문제이다.
1. 우선 줄이 6개이므로 st에 빈 배열 6개를 선언해준다.
2. N만큼 반복문을 돌며 줄 번호와 프렛번호를 입력받는다.
3. 만약 st[line-1]에 원소가 존재한다면, 이미 그 줄을 누르고 있는 상태이다.
따라서 p(프렛번호)와 그 줄에서 가장 높은 음인 st[line-1][-1]을 비교해서
p가 더 작으면 그 줄에 있는 높은 음을 pop해주고, p와 같으면 그냥 넘어가고
p가 더 크면 st[line-1]에 p를 append해준다.
(이 모든 것을 할때마다 손가락이 움직이는 것이므로 answer 1증가)
4. 만약 p가 그 줄의 가장 낮은 음보다도 작으면 st[line-1]의 원소를 모두 pop하게 된다.
따라서, 그 경우에 19번째줄에서 st[line-1]이 비었으면 st[line-1]에 [p]를 넣어주어야 한다.
5. (22번째 줄) 당연히 입력받은 line에 손가락이 없으면 st[line-1]에 [p]를 넣어주면 된다.
import sys
input = sys.stdin.readline
N, P = map(int,input().split())
st = [[] for _ in range(6)]
answer = 0
for _ in range(N):
line, p = map(int,input().split())
if st[line-1]:
while st[line-1]:
if p < st[line-1][-1]:
st[line-1].pop()
answer += 1
elif p == st[line-1][-1]:
break
else:
st[line-1].append(p)
answer += 1
break
if not st[line-1]:
st[line-1] = [p]
answer += 1
else:
st[line-1] = [p]
answer += 1
print(answer)
(solved.ac 티어: 실버 2)
728x90
반응형
'문제풀이 > BaekjoonOnlineJudge' 카테고리의 다른 글
[Python] BOJ 16120 - PPAP (0) | 2021.06.09 |
---|---|
[Python] BOJ 2346 - 풍선 터뜨리기 (0) | 2021.06.08 |
[Python] BOJ 12789 - 도키도키 간식드리미 (0) | 2021.06.06 |
[Python] BOJ 14889 - 스타트와 링크 (0) | 2021.06.06 |
[Python] BOJ 1759 - 암호 만들기 (0) | 2021.06.04 |
TAGS.