Today's special moments become memories of tomorrow.

BOJ

[백준 2841번] 외계인의 기타 연주 (java)

lotus lee 2021. 2. 20. 21:12

백준 2841번 : 외계인의 기타 연주

 

2841번: 외계인의 기타 연주

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

www.acmicpc.net

 

각 줄마다 P개의 프렛이 있다.

줄이 총 6개 이므로 각 줄별로 스택을 만들기 위해 스택 배열을 생성하고 크기를 6개로 하였다.

 

만약에 특정 줄(n)의 스택(stack[n])에 대해서

 

- 스택의 top에 있는 프렛이 현재 프렛보다 크다면, top의 프렛이 현재 프렛보다 작을 때까지 pop한다.

  현재 프렛의 음을 내기 위해서는 그보다 큰 프렛에서 누르고 있는 손을 모두 떼야하기 때문이다.

  pop을 하는 것은 손가락을 떼는 행위이므로 pop할 때마다 카운트를 증가시킨다.

  pop을 다하고 나면 음을 내고 싶은 프렛을 눌러야 하므로 현재 프렛을 push 한다.

  push하는 것은 손가락을 누르는 행위이므로 역시 카운트를 증가시킨다.

  

 

- 스택의 top에 있는 프렛이 현재 프렛보다 작다면, 손가락을 굳이 떼지 않고 새로운 프렛을 누르면 되므로

  스택에 현재 프렛을 push 하고, 카운트를 증가시킨다.

 

 

소스코드 : 

 

'BOJ' 카테고리의 다른 글

[백준 9184번] 신나는 함수 실행 (java)  (0) 2021.02.23
[백준 1969번] DNA (java)  (0) 2021.02.20
[백준 1935번] 후위 표기식2 (java)  (0) 2021.02.20
[백준 17298번] 오큰수 (java)  (2) 2021.02.20
[백준 1406번] 에디터 (java)  (0) 2021.02.18