[Baekjoon] 2841 외계인의 기타 연주 python
🏷 문제
💡 코드
from sys import stdin
N, P = map(int, stdin.readline().split())
melody = [list(map(int, stdin.readline().split())) for _ in range(N)]
# 기타의 1~6번줄 각각에 대한 리스트 생성
strings = [[] for _ in range(7)]
res = 0
# 입력받은 음계(줄, 프렛)
for l, f in melody:
# 해당 줄에 프렛이 하나도 없으면 새로 추가
if len(strings[l]) == 0:
strings[l].append(f)
res += 1
# 해당 줄에 프렛이 있는 경우
else:
# 연주하려는 프렛이 기존의 프렛보다 높은 음이라면, 새로 추가
if f > strings[l][-1]:
strings[l].append(f)
res += 1
print(strings[l])
# 연주하려는 프렛이 기존의 프렛과 같은 음이라면, 그냥 지나감
elif f == strings[l][-1]:
print(strings[l])
continue
# 연주하려는 프렛이 기존의 프렛보다 낮은 음이라면, 연주하려는 프렛보다 높은 음들을 모두 pop
else:
while strings[l] and f < strings[l][-1]:
strings[l].pop()
res += 1
if strings[l] and f == strings[l][-1]:
continue
# 그리고 나서 연주하려는 프렛 추가
strings[l].append(f)
res += 1
print(res)
🔑
✔️ 접근 방식
- 기타 줄 개수만큼 리스트를 만듦
- 입력받은 멜로디를 보면서 해당 줄에 프렛이 없다면 추가해주고,그렇지 않은 경우는 다시 3가지 경우로 나누어 조건을 확인함
- 연주하려는 프렛이 기존 프렛보다 높다면? ➡️ 새로 추가 후 결과값 카운트
- 연주하려는 프렛이 기존 프렛과 같다면? ➡️ 그냥 넘어감
- 연주하려는 프렛이 기존 프렛보다 낮다면?
➡️ 연주하려는 프렛보다 높은 음들을 모두 pop() 한 후 새로 추가 후 결과값 카운트
💡 마지막 경우의 조건문에서
while strings[l]:
를 고려하지 않아서 계속 인덱스 오류가 났다 😂
해당 기타 줄에 프렛이 남아있는 지 부터 확인했어야 했는데 간과하고 있었다 하하,,,,
Author And Source
이 문제에 관하여([Baekjoon] 2841 외계인의 기타 연주 python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sorzzzzy/Baekjoon-2841-외계인의-기타-연주-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)