[백준] 막대기(Python)

규갓 God Gyu·2024년 7월 25일

백준

목록 보기
25/96

문제

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 6, 9, 7, 6, 4, 6 이다. 일렬로 세워진 막대기를 오른쪽에서 보면 보이는 막대기가 있고 보이지 않는 막대기가 있다. 즉, 지금 보이는 막대기보다 뒤에 있고 높이가 높은 것이 보이게 된다. 예를 들어, 그림과 같은 경우엔 3개(6번, 3번, 2번)의 막대기가 보인다.

N개의 막대기에 대한 높이 정보가 주어질 때, 오른쪽에서 보아서 몇 개가 보이는지를 알아내는 프로그램을 작성하려고 한다.

입력

첫 번째 줄에는 막대기의 개수를 나타내는 정수 N (2 ≤ N ≤ 100,000)이 주어지고 이어지는 N줄 각각에는 막대기의 높이를 나타내는 정수 h(1 ≤ h ≤ 100,000)가 주어진다.

출력

오른쪽에서 N개의 막대기를 보았을 때, 보이는 막대기의 개수를 출력한다.

예제 입력 1

6
6
9
7
6
4
6

예제 출력 1

3

예제 입력 2

5
5
4
3
2
1

예제 출력 2

5

최종 코드

import sys

def read_input():
  try:
    with open('input.txt', 'r') as f:
      data = f.read().split()
  except FileNotFoundError:
    data = sys.stdin.read().split()
  return data
data = read_input()
  
# 기준 값
N = int(data[0])
stick_list = list(map(int, data[1:len(data)+1]))

# 기준 높이
standard_height = 0

# 합산
count = 0

# 뒤에서부터 앞으로 반복
for i in range(N-1, -1, -1):
  # i번째 값이 기준 높이보다 클 경우만 count +1
  if stick_list[i] > standard_height:
    count +=1
    # 최초 i번째보다 그 다음 본 높이가 더 높으면
    # 기준 높이를 갱신해주기
    if stick_list[i] > standard_height:
      standard_height= stick_list[i]
    
print(count)

일단 cph와 터미널 디버깅을 둘 다 사용하기 위해 입력을 함수를 사용하였다

  • N - 막대기 개수
  • stick_list - 숫자로 맵핑한 리스트
  • standard_height - 초기값 0
  • count - 합산 개수(보이는 막대기 개수)
  • 뒤에서부터 앞으로 리스트를 반복시키면서, i인덱스에 위치한 값이 기준 높이보다 크면(즉 막대기가 눈에 보이면) count에 +1을 해주었고, 기준 높이가 바뀌어야 하기에, 새로운 기준 높이를 그 큰 값으로 재 할당해주어서 문제를 풀었던 나름 풀만했던 문제였다
profile
웹 개발자 되고 시포용

0개의 댓글