곽로그
[백준 2841] 외계인의 기타연주 -보완필요 본문
반응형
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