반응형
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씩 감소하며 반복되기 때문입니다.
도움이 필요한 부분이 있으시다면 언제든 말씀해주시기 바랍니다!
반응형
'BOJ' 카테고리의 다른 글
백준 1966번 - 프린터 큐 [Python] (0) | 2023.06.07 |
---|---|
백준 11659번 - 구간 합 구하기 4 [python] (0) | 2023.04.03 |
백준 1436번 - 영화감독 숌 [python] (0) | 2023.03.18 |
백준 1874번 - 스택 수열 [python] (0) | 2023.03.18 |
백준 10799번 - 쇠막대기 [python] (0) | 2023.03.17 |