곽로그

[백준 2841] 외계인의 기타연주 -보완필요 본문

알고리즘/백준

[백준 2841] 외계인의 기타연주 -보완필요

일도이동 2019. 12. 27. 02:57
반응형

 

https://www.acmicpc.net/problem/2841

 

2841번: 외계인의 기타 연주

문제 상근이의 상상의 친구 외계인은 손가락을 수십억개 가지고 있다. 어느 날 외계인은 기타가 치고 싶었고, 인터넷에서 간단한 멜로디를 검색했다. 이제 이 기타를 치려고 한다. 보통 기타는 1번 줄부터 6번 줄까지 총 6개의 줄이 있고, 각 줄은 P개의 프렛으로 나누어져 있다. 프렛의 번호도 1번부터 P번까지 나누어져 있다. 멜로디는 음의 연속이고, 각 음은 줄에서 해당하는 프렛을 누르고 줄을 튕기면 연주할 수 있다. 예를 들면, 4번 줄의 8번 프렛을 누

www.acmicpc.net

 

문제

스택으로 풀라는 힌트가 없었으면 못풀었을 것같다. 그리고 문제를 이해하는데 좀 오래 걸렸는데, 줄 번호가 높을 수록 음도 높아지는 줄 알았다. 그래서 처음엔 1,5/2,3/이걸 15, 23으로 변환해서 stack에 push pop하는 걸로 풀려고 했는데 아무리 해도 11이 나와서 결국에는 질문게시판에 있는 예제 해설을 보고 풀었다. 

 

근데 이 예제에 대한 해설이 없으면 계속 헤맬듯. 

 

보완점

1) Stack배열을 선언만하고 사용하려고 했다.  객체배열은 생성먼저 할것

이 부분

2) while문에 중복이 있다. 보완이 필요해

package stack;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

public class Main {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int N=in.nextInt();
		int P=in.nextInt();
		
		//6개의 줄에 해당하는, 크기가 6인 스택배열 생성
		Stack<Integer>[] stackList=new Stack[6]; 
		for(int i=0;i<6;i++) {
			stackList[i]=new Stack();
		}
		
		//누르고 튕기는 횟수(push하고 pop하는 횟수)
		int count=0;
		
		//line은 stackList에서 line번째 스택, flat은 숫자
		//line번째 스택에서 맨 위에 있는 숫자가 flat보다 크면 pop, 작으면 push, 같으면 아무것도 안함
		for(int i=0;i<N;i++) {
			int line =in.nextInt(); 
			int flat=in.nextInt();
			int stackIndex=line-1;
			
			if(stackList[stackIndex].size()==0) {
				stackList[stackIndex].push(flat);
				count++;
			}
			else {
				while(true) {
					int topNumber=0;
					if(stackList[stackIndex].size()==0) {
						stackList[stackIndex].push(flat);
						count++;
						break;
					}
					else {
						topNumber=stackList[stackIndex].peek();
						if(flat>topNumber) {
							stackList[stackIndex].push(flat);
							count++;
							break;
						}
						else if(flat==topNumber) {
							break;
						}
						else {
							stackList[stackIndex].pop();
							count++;
							continue;
						}
					}
				}
			}
		}
		System.out.println(count);
	}
}
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 10828] 스택  (0) 2019.12.28
[백준 1874] 스택수열  (0) 2019.12.27
[백준 10773] 제로  (0) 2019.12.27
다시 풀어볼 백준문제  (0) 2019.11.15
[백준 2884] 알람시계  (0) 2019.10.29
Comments