# 3. APS/백준

백준 # Python_17608_막대기

둥굴둥굴둥굴레차 2021. 9. 18. 23:38
 

17608번: 막대기

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

www.acmicpc.net

문제

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

# 막대기의 총 갯수
stickNumber = int(sys.stdin.readline())
# 모든 막대기의 길이를 넣어둘 리스트
stickHeightList = []

# input값들을 차근차근 받아와서, 막대기의 길이를 넣은 리스트를 생성
for i in range(stickNumber):
    stickHeightList.append(int(sys.stdin.readline()))

# 가장 높은 높이의 막대기의 길이 == 가장 오른쪽에 있는 막대기의 길이
highestStick = stickHeightList[-1]

# 맨 오른쪽의 막대기는 항상 count 되므로 cnt는 1 부터 시작
cnt = 1
for j in range(-1, -int(stickNumber)-1, -1): # -2 -3 -4 -5 -6
    if stickHeightList[j] > highestStick:
        cnt += 1
        # 맨 오른쪽의 막대기보다 더 큰 막대기를 만났으니, 기준점을 더 큰 막대기의 값으로 재설정해주자.
        highestStick = stickHeightList[j]

print(cnt)

'# 3. APS > 백준' 카테고리의 다른 글

백준 # Python_2606_바이러스  (0) 2021.09.25
백준 # Python_17298_오큰수  (1) 2021.09.19
백준 # Python_1100_하얀 칸  (0) 2021.09.14
백준 # Python_2798_블랙잭  (0) 2021.09.02
백준 # Python_2501_약수 구하기  (0) 2021.09.02