[BOJ] 17608. 막대기 (python / Java)

백준 17608 막대기 파이썬 자바

 

17608번: 막대기

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

www.acmicpc.net

# 파이썬: 단순 계산

- sys 안 쓰고 input으로 처리하면 시간 초과! 주의

import sys

N = int(sys.stdin.readline())
L = list(int(sys.stdin.readline()) for _ in range(N))
ans = 1
max = L[-1]

# 오른쪽부터 하나씩 최대값 변경해가면서 탐색
for x in range(N - 1, -1, -1):
  if L[x] > max:
    max = L[x]
    ans += 1

print(ans)

 

// 자바: 스택 사용

public class B17608 {
    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 ans = 1;

        Stack <Integer> stack = new Stack<>();
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            stack.push(Integer.parseInt(st.nextToken()));
        }

        int top = stack.pop();

        while (!stack.isEmpty()) {
            int n = stack.pop();
            if (n > top) {
                ans++;
                top = n;
            }
        }

        System.out.println(ans);

    }
}