백준 - 스택 수열 (실버 2)

2024. 3. 6. 22:00코딩테스트 정리(자바)

728x90

로직

1-1. start=0으로 두고 start<number 라면 start+1부터 number만큼 스택에 담고 + 출력, start=number로 두기

1-2. stack.peek()가 number와 다르다면 NO 출력 후 종료

2. stack.pop()하고 - 출력

3. index가 n이 될 때까지 반복

 

import java.io.*;
import java.util.*;

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(
                new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(
                new OutputStreamWriter(System.out));

        int n=Integer.parseInt(br.readLine());
        int[] num=new int[n];

        for(int i=0;i<n;i++){
            num[i]=Integer.parseInt(br.readLine());
        }
        Stack <Integer> stack=new Stack<>();
        int start=0;
        int index=0;
        StringBuilder sb=new StringBuilder();
        while(index< n){
            int number=num[index++];
            if(start<number){
                for(int i=start+1;i<=number;i++){
                    stack.push(i);
                    sb.append("+").append("\n");
                }
                start=number;
            }
            else if(stack.peek()!=number){
                bw.write("NO");
                bw.flush();
                bw.close();
                return;
            }
            stack.pop();
            sb.append("-").append("\n");
        }
        bw.write(sb.toString());
        bw.flush();
        bw.close();
    }
}

 

 


내가 처음에 구현하려던 로직

-> 마구잡이로 짠것 같다. 지금 보니 굉장히 복잡하다.

import java.io.*;
import java.util.*;

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(
                new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(
                new OutputStreamWriter(System.out));

        int n=Integer.parseInt(br.readLine());
        int[] num=new int[n];

        for(int i=0;i<n;i++){
            num[i]=Integer.parseInt(br.readLine());
        }
        Stack <Integer> stack=new Stack<>();
        int cnt=1;
        int index=0;
        StringBuilder sb=new StringBuilder();
        stack.push(1);
        sb.append("+\n");
        while(cnt <= n){
            if(!stack.isEmpty() && stack.peek()==num[index]){
                stack.pop();
                sb.append("-\n");
                index++;
            }
            else if(cnt < n){
                stack.push(++cnt);
                sb.append("+\n");
            } else {
                break;
            }
        }
        if(!stack.isEmpty())
            bw.write("NO");
        else
            bw.write(sb.toString());

        bw.flush();
        bw.close();
    }
}
728x90