곽로그
[백준 2841] 외계인의 기타연주 -보완필요 본문
반응형
https://www.acmicpc.net/problem/2841
문제
스택으로 풀라는 힌트가 없었으면 못풀었을 것같다. 그리고 문제를 이해하는데 좀 오래 걸렸는데, 줄 번호가 높을 수록 음도 높아지는 줄 알았다. 그래서 처음엔 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