문제 출처: https://www.acmicpc.net/problem/17608
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개의 막대기를 보았을 때, 보이는 막대기의 개수를 출력한다.
정답
import sys
input = sys.stdin.readline
num = int(input())
arr = []
for _ in range(num):
arr.append(int(input()))
tmp = arr[-1]
cnt = 1
for i in range(num-2, -1, -1):
if tmp < arr[i]:
cnt+=1
tmp = arr[i]
print(cnt)
1. num, arr에 값을 입력
2. tmp에 제일 마지막 값을 세팅
3. for문을 사용하여 뒤에서부터 앞자리 수의 값이 더 크면 cnt에 +1을 해주고 tmp에 값을 변경
4. cnt값을 출력
처음에 input으로 실행을 했더니 시간초과가... ㅎㅎ 그래서 sys.stdin.readline으로 변경하였습니다.
'코딩 > 백준' 카테고리의 다른 글
[백준/파이썬/그래프/BFS] 1926번 그림 코딩테스트 연습풀이 (0) | 2022.09.15 |
---|---|
[백준/파이썬/자료구조] 1717번 집합의 표현 코딩테스트 연습풀이 (0) | 2022.09.14 |
[백준/파이썬/이분탐색] 12015번 가장 긴 증가하는 부분 수열 2 코딩테스트 연습풀이 (0) | 2022.09.13 |
[백준/파이썬/누적합] 1806번 부분합 코딩테스트 연습풀이 (0) | 2022.09.13 |
[백준/파이썬/그리디] 1202번 보석 도둑 코딩테스트 연습풀이 (0) | 2022.09.13 |