[Python] BOJ 17608: 막대기

Binsu·2021년 8월 14일
0

Algorithms

목록 보기
8/22
post-thumbnail

문제

접근 방법

stack 리스트에 각각의 높이를 가진 N개의 막대기를 append하고, 문제 본문의 그림처럼 보는 방향에서 가장 먼저 보이는 막대기를 tallest에 설정해준다. for문은 stack의 길이에서 1을 뺀 N-1부터 스택의 끝까지 감산을 반복하며 stack[i] 원소가 tallest보다 크다면, 보이는 막대(cnt)에 1을 누적하면 된다.

풀이

import sys
import sys

N = int(sys.stdin.readline())
stack = []
cnt = 1  # 보이는 막대 갯수를 누적하기 위한 변수
# 가장 먼저 보이는 막대가 있으므로 1부터 시작


for _ in range(N):
    stack.append(int(sys.stdin.readline().rstrip()))

tallest = stack[-1]  # 우선, 가장 먼저 보이는 막대를 지정함

for i in range(N-1, -1, -1): 
    if stack[i] > tallest:  # stack 원소 중 tallest보다 크면
        cnt += 1    # 보이는 막대 수를 누적하고
        tallest = stack[i]  # tallest에 그 원소를 설정
        
print(cnt)

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

0개의 댓글