본문 바로가기
Problem Solving/Baekjoon

[백준] 17608 막대기 - Data Structure / Java

by graycode 2023. 3. 16.

 문제 링크

 

17608번: 막대기

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로

www.acmicpc.net

 

 풀이 과정

stack에 각 막대기의 높이를 push하고 모두 pop한다.

peek하여 최대 높이가 이후 꺼낼 높이보다 높다면 cnt++를 수행하고,

높이는 최대값으로 갱신해 오른쪽에서 현재 최대 높이보다 낮은 막대기는 볼 수 없는 조건을 만족시킨다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public 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());

        Stack<Integer> stk = new Stack<>();
        while (n-- > 0)
            stk.push(Integer.parseInt(br.readLine()));

        int max = stk.pop(), cnt = 1;
        while (!stk.empty()) {
            if (max < stk.peek())
                cnt++;

            max = Math.max(max, stk.pop());
        }

        bw.write(String.valueOf(cnt));
        bw.flush();
    }

}

댓글