less than 1 minute read

2841 외계인의 기타 연주 / c++ / Silver1 / 17분

문제 및 코드

풀이 과정

자료 구조 / 스택

  1. 6개의 기타 줄이 있고, N 개의 음이 주어진다. 각 음은 줄 번호와 프렛 번호로 이루어져 있을 때, 손가락의 움직임(눌렀다 뗐다)의 최소값을 출력하는 문제
  2. 쉽게 풀어보자면, 6개의 스택이 있고, N번의 입력이 들어온다.
  3. 입력은 스택의 번호와, 넣어야 하는 숫자를 알려준다.
  4. 이 때 스택에 넣거나 빼는 수를 최소로 했을 때의 값을 출력하는 문제.
  5. 만약 넣어야 하는 숫자가 해당 스택의 탑보다 작은 경우라면, 스택이 비어있거나, 스택의 탑이 넣어야 하는 숫자보다 작거나 같아질 때까지 스택의 팝 한다. 이 때 그 수만큼 Answer 증가 (해당 줄의 음은 잡고 있는 프렛 중 가장 높은 부분을 따른다.)
  6. 그렇게 제거한 뒤
    1. 만약 스택이 비거나 스택의 탑이 넣어야 하는 수보다 작다면, 수를 넣고 Answer 증가
    2. 만약 스택의 탑이 넣어야 하는 수와 같다면, 따로 넣지 않고 다음 차례로 넘어감
  7. Answer 출력

다시 생각해 볼 점

  1. 구현은 정말 금방 끝났는데, 문제가 잘 이해가 되지 않아서 이해하는데 시간이 많이 들었다.
  2. 기타 프렛의 스펠링은 Pret이 아니라 Fret이었다. 기타를 안쳐봐서 생소한 언어였는데 손으로 잡아서 음을 조절하는 부분이다.