728x90
반응형
https://www.acmicpc.net/problem/6198
6198번: 옥상 정원 꾸미기
문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으
www.acmicpc.net
문제 해결
- stack 만으로 사용하기에는 시간초과가 걸려 dp를 이용함
- for문을 통해 기준 빌딩을 잡은 가장 가까운 이전 빌딩부터 차례로 높이를 비교하여 더 큰 빌딩을 잡는다.
- 그 빌딩을 마지막으로 처음 빌딩부터 가장 긴 길이의 감소 수열 길이를 dp를 통해 저장한다.
- 그러면 기준 빌딩은 가장 긴 길이의 감소 수열 길이는 +1이고 그만큼의 정답이 늘어난다.
- 이것도 pypy3로는 통과 (python3로는 시간초과)
CODE
n = int(input())
stack = []
answer = 0
dp = [0]*(n+1) # dp[i]는 1~i까지 빌딩중 i를 마지막으로 가장 긴 감소 수열의 원소 개수
for j in range(1,n+1):
x = int(input())
i =0
target = x
while i<len(stack):
i += 1
if stack[-i] > target:
dp[j] = dp[j-i] + 1
answer += dp[j]
break
stack.append(x)
print(answer)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 3151 합이 0 (0) | 2023.04.24 |
---|---|
[python] 백준 18869 멀티버스 Ⅱ (0) | 2023.04.24 |
[python] 백준 16401 과자 나눠주기 (0) | 2023.04.23 |
[python] 백준 2295 세 수의 합 (1) | 2023.04.23 |
[python] 백준 17609 회문 (0) | 2023.04.23 |
댓글