반응형
SMALL
반응형
https://www.acmicpc.net/problem/17608
문제
아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 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
풀이
stk[i] > stk[i-1] 이면 이전값 제거
set() 함수로 중복제거 후 리스트 길이 출력
코드
import sys
n = int(sys.stdin.readline())
stk = []
for _ in range(n):
m = int(sys.stdin.readline())
stk.append(m)
# 조건에 맞게 스택 처리
i = 1 # 첫 번째 인덱스부터 시작
while i < len(stk): # 리스트를 순회하면서
if stk[i] > stk[i-1]: # 현재 값이 이전 값보다 크면
stk.pop(i-1) # 이전 값 제거(pop()는 마지막값 제거하는거라 인덱스 지정해야함)
i = max(1, i-1) # i가 너무 작은 값이 되지 않도록 조정
else:
i += 1 # 그렇지 않으면 다음으로 넘어감
result = set(stk)
print(len(result))
--
스택이랑 아직 안친해요,,
반응형
LIST
'Algorithm > 백준' 카테고리의 다른 글
[백준17478/Python] 재귀함수가 뭔가요? (0) | 2025.01.28 |
---|---|
[백준10828/Python] 스택 (0) | 2025.01.28 |
[백준10773/Python] 제로 (0) | 2025.01.27 |
[백준12605/Python] 단어순서 뒤집기 (0) | 2025.01.27 |
[백준2720/Python] 세탁소 사장 동혁 (0) | 2025.01.27 |
댓글