개발 무지렁이

[문제풀이] B17608 막대기 본문

코딩 테스트/문제풀이

[문제풀이] B17608 막대기

Gaejirang-e 2023. 3. 19. 17:04

막대기


  🪅 가장 늦게 들어온 데이터부터 검사하는 데이터의 흐름을 보고 스택을 생각해낼 수 있느냐
  🪅 조건을 만족하는 데이터가 나왔을 때, 기준을 변경해야하는 것을 잊지 않았느냐
  🪅 스택 관련 라이브러리를 사용할 줄 아느냐

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

/**
 * 백준 17608번 막대기
 * 
 * 입력:
 * 첫 번째 줄에는 막대기의 개수를 나타내는 정수 N (2 ≤ N ≤ 100,000)이 주어지고 이어지는 N줄 각각에는 막대기의 높이를 나타내는 정수 h(1 ≤ h ≤ 100,000)가 주어진다.
 * 
 * 출력:
 * 오른쪽에서 N개의 막대기를 보았을 때, 보이는 막대기의 개수를 출력한다.
 * 
 */
public class Main {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        Stack<Integer> stack = new Stack<>();

        // stack에 입력받은 값 push
        for(int i = 0; i < N; i++) {
            int element = Integer.parseInt(br.readLine());
            stack.push(element);
        }

        int viewCnt = 1;
        // 맨위의 기준이 되는 높이 pop
        int standard = stack.pop();

        while(!stack.isEmpty()) {
            int cur = stack.pop();
            if(cur > standard) {
                standard = cur;
                viewCnt++;
            }
        }

        System.out.println(viewCnt);
    }
}

💡 문제 접근 과정
: 늦게 들어간 데이터부터 높이를 조사해야되므로, 나중에 들어간 데이터를 먼저 빼내는 '스택 자료구조'를 생각했다.
즉, 스택에서 pop하면서 조건을 검사해주면 되겠다는 생각을 했다.

Comments