CodingTest/Baekjoon

[baekjoon] 백준 2841번(파이썬): 외계인의 기타 연주

JunJangE 2022. 4. 17. 00:46

문제

 

2841번: 외계인의 기타 연주

첫째 줄에 멜로디에 포함되어 있는 음의 수 N과 한 줄에 있는 프렛의 수 P가 주어진다. (N ≤ 500,000, 2 ≤ P ≤ 300,000) 다음 N개 줄에는 멜로디의 한 음을 나타내는 두 정수가 주어진다. 첫 번째 정수

www.acmicpc.net

알고리즘

- 반복문을 통해 줄의 번호와 프렛의 번호를 입력받아 확인한다.

- 주어진 줄의 더 높은 프렛을 누르고 있는 경우에 while문을 통해 손가락을 하나씩 뗀다.

- 이미 누르고 있는 줄의 프렛인 경우 패스한다.

- 주어진 줄의 프렛이 누르고 있는 프렛보다 높고 같지 않은 경우 프렛을 누른다.

코드

import sys

n, p = map(int, sys.stdin.readline().split())
line = [[0] for x in range(7)]
cnt = 0

# 반복문을 통해 줄의 번호와 프렛의 번호를 확인
for i in range(n):
    line_num, plat_num = map(int, sys.stdin.readline().split())

    # 주어진 줄의 더 높은 프렛을 누르고 있는 경우, 손가락을 하나씩 뗀다.
    while line[line_num][-1] > plat_num:
        line[line_num].pop()
        cnt += 1

    # 이미 누르고 있는 줄의 프렛인 경우 패스
    if line[line_num][-1] == plat_num:
        continue

    # 주어진 줄의 프렛을 누른다.
    line[line_num].append(plat_num)
    cnt += 1

print(cnt)

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com