본문 바로가기

Algorithm & Data Structure

백준 - 17608번(스택)

728x90
반응형

https://www.acmicpc.net/problem/17608

 

17608번: 막대기

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

www.acmicpc.net

import sys #sys 모듈 호출

n = int(sys.stdin.readline())

arr = [0 for _ in range(n)]

for i in range(n):
    arr[i] = int(sys.stdin.readline()) #배열 입력

ans = arr.pop() # 가장오른쪽에 있는 막대기 pop

cnt = 1 #가장 오른쪽 막대기는 무조건 보이기때문에 cnt 초기값은 1

while arr:
    t = arr.pop()
    if t > ans: #pop 된 값이 지금 까지 나온 값중 가장 큰 값보다 크다면 실행
        ans = t #ans를 최대값으로 대치
        cnt = cnt + 1 #cnt 개수 1증가

print(cnt)

 

오른쪽을 시작점으로 설정했을 때 자신보다 앞에 자기보다 큰 막대기가 있을 경우 오른쪽 끝에서 봤을 때 절대 안 보인다는 것만 숙지하고 풀면 될 것 같다.

728x90
반응형