백준 1874,1021 (stack, queue)

cornpip·2023년 5월 24일
0

알고리즘

목록 보기
3/3

1874

public class Sequence {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder stb = new StringBuilder();
        int t = Integer.parseInt(br.readLine());

        Stack<Integer> st = new Stack<Integer>();
        st.push(1); stb.append("+\n");

        int number = 0, value = 1;
        while (t > 0) {
            number = Integer.parseInt(br.readLine());
            while (number > value) {
                value++;
                st.push(value); stb.append("+\n");
            }
            int top = st.pop();
            if( top != number ){
                stb.delete(0, stb.length());
                stb.append("NO");
                break;
            }else{
                if(t == 1) stb.append("-");
                else stb.append("-\n");
            }
            t--;
        }
        System.out.println(stb.toString());
    }
}

BufferedWriterbr.close()는 내부적으로 br.flush() 후 진행된다.
BufferedWriter 를 열은채로 둘 수도 없기때문에 사용하면 닫아야하고 buffer는 무조건 출력된다.

쌓아둔 buffer를 지우는 마땅한 메서드는 없는 듯 하므로 buffer를 출력하지 않아야 하는 분기가 있다면 BufferWriter말고 StringBuilder를 쓰자.

1021

public class Bang {
    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()), m = Integer.parseInt(st.nextToken());
        String[] a = br.readLine().split(" +");
        Queue<Integer> q = new LinkedList<>();
        for (int i = 1; i <= n; i++) {
            q.offer(i);
        }
        int total_count = 0, len = n;

        for (String aa : a) {
            int head = q.peek(), count = 0;
            while (!Integer.valueOf(aa).equals(head)) {
                q.offer(q.poll()); count++;
                head = q.peek();
            }
            total_count += Math.min(count, len-count);
            q.poll(); len--;
        }
        System.out.println(total_count);
    }
}

기본 Stack 클래스는 FILO 메서드만 제공하고
기본 Queue 인터페이스는 FIFO 메서드만 구현한다.

양쪽으로 삽입/삭제가 필요할 때는 Deque 인터페이스를 구현하자.

profile
https://cornpip.tistory.com 티스토리로 이전했습니다!

0개의 댓글