알고리즘
[백준 2841 JAVA] 외계인의 기타 연주
begong
2024. 2. 17. 09:10
반응형
간단한 stack을 활용하는 문제
뭔가 문제가 헷갈리게 되어있는듯 한데 음이 N까지 프랫이 P까지 범위이다.
따라서 스택을 N개 만들어주어야 한다.
P는 내가 푼 방법에서는 쓸 필요가 없는데
stack의 가장 위에있는 요소와 비교를해서 손가락을 때는지, 안때는지 파악을 한다.
그래서 굳이 P를 사용할 필요가 없다.
조건을 잘 맞춰서 조건문을 작성하고 count를 해주면 쉽게 정답이 나온다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int P = Integer.parseInt(st.nextToken());
Stack<Integer>[] stacks = new Stack[6]; //여기 뭔가 수정해야될듯, 문법오류
for(int i =0; i<6; i++){
stacks[i] = new Stack<>();
}
int count = 0;
for(int i =0; i<N; i++){
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
if(stacks[A].isEmpty() || stacks[A].peek()<B){
//stack이 비었을때
}else if(stacks[A].peek()>B){
while(!stacks[A].isEmpty() && stacks[A].peek()>B){
stacks[A].pop();
count++;
}
if(!stacks[A].isEmpty() && stacks[A].peek() == B){
continue;
}
}else{
continue;
}
stacks[A].push(B);
count++;
}
System.out.println(count);
}
}
반응형