알고리즘

[백준 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);
    }
}

반응형