1. 유형
스택
2. 풀이
위의 조건 처럼 입력을 받을때 기존의 스택의 peek()보다
더큰 플랫을 입력 받을 경우 추가를 해준다.
하지만 더 작은 플랫을 입력 받을 시, 스택에서 입력값보다 더 큰 플랫이 나올 때까지
pop을 해야한다.
위와 같은 경우가 나오면 3, 2를 빼고 마지막에 1은 이미 존재 하기 때문에 push를 하면 안된다
그렇기 때문에 while문을 빠져나온 후, 마지막 if문의 조건을 주었다.
3. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
// 더 높은 음이 나올 경우 손을 땐다.
int N = Integer.valueOf(st.nextToken());
int P = Integer.valueOf(st.nextToken());
Stack<Integer> stack[] = new Stack[7];
for (int i = 0; i < 7; i++) {
stack[i] = new Stack<>();
}
int num = 0;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(in.readLine(), " ");
int n = Integer.valueOf(st.nextToken());
int p = Integer.valueOf(st.nextToken());
if (stack[n].isEmpty() || stack[n].peek() < p) {
stack[n].push(p);
num++;
} else if (stack[n].peek() > p) {
while (!stack[n].isEmpty() && stack[n].peek() > p) {
stack[n].pop();
num++;
}
if (stack[n].isEmpty() || (!stack[n].isEmpty() && stack[n].peek() != p)) {
stack[n].push(p);
num++;
}
}
}
System.out.println(num);
}
}
4. 느낀점
발상은 빠르게 떠올렸지만, 예외처리를 하는것 놓쳤다.
더 깊게 생각하는 버릇을 들여야겠다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준 - 20165] 골드5 - 인내의 도미노 장인 호석(java) (0) | 2020.11.30 |
---|---|
[백준 - 19640] 골드5 - 화장실의 규칙 (0) | 2020.11.28 |
[백준 - 1238] 골드3 - 파티 (0) | 2020.11.14 |
[백준 - 14698] 골드4 - 전생했더니 슬라임 연구자였던 건에 대하여(Hard) (0) | 2020.11.12 |
[백준 - 15922] 골드5 - 아우으 우아으이야!! (0) | 2020.11.10 |