https://www.acmicpc.net/problem/6198
6198번: 옥상 정원 꾸미기
문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으
www.acmicpc.net
백준 - 옥상 정원 꾸미기 (Bad Hair Day) (6198번)
난이도 : Gold 5
알고리즘&자료구조 : Stack (스택)
import sys
input = sys.stdin.readline
class Cows():
def __init__(self):
self._stack(int(input())-1)
def _stack(self, N):
stack = [int(input())]
cnt = idx = 0
for _ in range(N):
cur = int(input())
idx += 1
while stack and stack[-1] <= cur:
idx -= 1
stack.pop()
cnt += idx
stack.append(cur)
self.answer = cnt
if __name__ == '__main__':
cow_hairs = Cows()
print(cow_hairs.answer)
스택 (Stack) 을 활용하는 문제이다.
▶ 주어진 숫자 리스트에서, 숫자를 하나씩 받아온다.
▶ 현재 받아온 숫자 ( cur ) 가, 스택에 들어간 가장 최근 숫자 ( stack[-1] ) 보다 작을 때까지
( while stack and stack[-1] <= cur )
스택에서 숫자를 제거해나간다. ( stack.pop() )
▶ 스택이 비었거나, 스택의 가장 최근 숫자 ( stack[-1] ) 가 현재 숫자 ( cur ) 보다 크다면,
스택에 현재 숫자를 추가해주고 ( stack.append(cur) )
cnt 에 현재 숫자가 추가된 스택의 인덱스 ( idx ) 를 더해준다. ( cnt += idx )
▶ 모든 숫자를 다 받아서 위의 작업을 거친 뒤,
cnt 값을 반환한다.
'Algorithm' 카테고리의 다른 글
문자열 압축 (60057번) - 프로그래머스 (Programmers) (0) | 2023.07.17 |
---|---|
게임 개발 (1516번) - 백준 (BOJ) (0) | 2023.07.16 |
블록 이동하기 (60063번) - 프로그래머스 (Programmers) (0) | 2023.07.13 |
나머지 합 (10986번) - 백준 (BOJ) (0) | 2023.07.12 |
스도쿠 (2580번) - 백준 (BOJ) (0) | 2023.07.11 |