BOJ

백준 17608번 - 막대기 [python]

SS_G 2023. 3. 18. 20:25
반응형

Python 코드

import sys

def input():
    return sys.stdin.readline().rstrip()

n = int(input())

stack = []

# 막대기 높이 입력받아 stack에 저장
for _ in range(n):
    h = int(input())
    stack.append(h)

cnt = 0 # 보이는 막대기의 개수를 카운트하기 위해 초기화
max_h = 0 # 현재 기준으로 가장 높은 막대기의 높이를 저장하기 위해 초기화

# 스택 오른쪽부터 왼쪽끝까지 탐색해서 보이는 막대기 개수 카운트
for i in range(n-1, -1, -1):
    if stack[i] > max_h:
        cnt += 1
        max_h = stack[i]

print(cnt) #보이는 막대기 출력

Python 코드 풀이

이 문제는 문제 조건에 따라 오른쪽 막대기부터 시작해서, 막대기를 하나씩 비교하는 문제입니다. 현재 막대기보다 높이가 작은 막대기들은 보이지 않게 됩니다. 그래서 보이는 막대기를 세는 것이 이 문제의 핵심입니다.

"for i in range(n-1, -1, -1)" 이 부분은 오른쪽 끝부터 왼쪽 끝까지 순서대로 비교할 수 있게 해주는 부분입니다.

 

Python의 range() 함수에 대해 재정리하면, range() 함수는 range(start, stop, step)의 형태로 사용됩니다.

"start"는 시작 값으로, 생략 가능합니다.
"stop"는 종료 값을 나타냅니다.
"step"는 간격을 나타내며, 이 또한 생략 가능합니다.
위에서 "for i in range(n-1, -1, -1)" 부분을 보시면 세 번째 인자가 음수이므로, 이는 역순으로 출력된다는 것을 의미합니다. n이 6일 때 "[5, 4, 3, 2, 1, 0]"으로 출력되는 것을 볼 수 있습니다. 이는 6부터 시작해서 역순으로 1씩 감소하며 반복되기 때문입니다.

도움이 필요한 부분이 있으시다면 언제든 말씀해주시기 바랍니다!

반응형