Python/BAEKJOON
[백준] 2841번 외계인의 기타연주(python)
Magin
2022. 1. 8. 17:31
728x90
문제)
알고리즘)
- 처음 n, p 입력을 통해 스택(string)을 구성한다. 이후 n개만큼의 줄과 플렛을 입력
- 각 줄과 프렛을 통해 반복문을 통해 해당하는 줄에 추가 및 삭제
-최종적으로 손가락을 움직이는 횟수를 카운트
코드)
# #외계인의 기타연주
import sys
n, p = map(int, sys.stdin.readline().split()) #줄과 프렛 입력
string = [[] for _ in range(n)] #줄 갯수만큼
count = 0 #손가락을 움직이는 횟수
for _ in range(n): #n개만큼 입력
test_s, test_f = map(int, sys.stdin.readline().split())
while True:
#해당 줄에 이전 입력이 없다면
if not string[test_s-1]:
string[test_s-1].append(test_f)
count += 1
break
#이전 입력이 있었다면
else:
#입력 음이 이전보다 크다면
if string[test_s-1][-1] < test_f:
string[test_s-1].append(test_f)
count += 1
break
#입력음이 이전과 같다면
elif string[test_s-1][-1] == test_f:
break
#입력음이 이전보다 작다면(string[test_s-1][-1] > test_f)
else:
#입력음 보다 큰음이 없을 때까지 pop()
while string[test_s-1][-1] > test_f:
string[test_s-1].pop()
count += 1
#중간에 안전장치
if not string[test_s-1]:
break
#바로 위 반복문에서 탈출해서 입력음이 없다면
if test_f not in string[test_s-1]:
string[test_s-1].append(test_f)
count += 1
print(count) #최종 출력
#1) 해당 줄에 입력 프렛이 있는가?
#2) 이전 입력과 비교해서 1) 현재입력이 큰다. 2) 현재입력이 작다. 3) 같다.
#3) 2-2 에 해당한다면 현재입력보다 작은 값이 나올때까지 pop() d이후 현재 입력 프렛이 없다면 추가하고 카운트
728x90