일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- LCM
- popleft
- 우선순위큐
- 연관관계
- deque
- mvc
- spring
- Python
- 누적합
- appendleft
- 인프런
- 완전탐색
- c#
- pypy3
- 그리디 알고리즘
- Java
- BFS
- unity
- 합 구하기
- JPA
- 소수판별
- python3
- 백준
- C#강의
- 프로그래머스
- 파이썬
- 1일1솔
- DP
- 소수찾기
- 브루투포스
Archives
- Today
- Total
jae_coding
(백준 알고리즘 문제풀이) 14002번 가장 긴 증가하는 부분 수열 4 본문
반응형
문제
문제 접근
- 이전에 가장 긴 증가하는 수열과 문제 유형이 비슷하지만 dp의 개수만이 아닌 dp의 최대 길이와 dp 내용물을 출력하는 것이다.
- dp를 우선 구해준 후 dp를 역배열한 후, dp의 최대값을 저장하고 1씩 줄여가면서 같은 값이 있을 때 새로운 리스트에 저장을 해준다.
- 그리고 리스트를 문자열로 출력해준다.
코드
import sys
N = int(sys.stdin.readline())
seq = list(map(int, sys.stdin.readline().split()))
dp = [1] * N
for i in range(N):
for j in range(i):
if seq[i] > seq[j]:
dp[i] = max(dp[i], dp[j] + 1)
count = max(dp)
result = list()
output = ""
for k in range(N-1, -1, -1):
# print(dp[k])
if dp[k] == count:
count -= 1
result.append(seq[k])
result.reverse()
for t in result:
output += str(t) + " "
print(max(dp))
print(output)
느낀점
dp배열에 대한 활용을 역순으로 해주는 좋은 문제였다. 알고리즘 생각은 너무 어렵다..
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
(백준 알고리즘 문제풀이) 11054번 가장 긴 바이토닉 부분 수열 (0) | 2022.07.07 |
---|---|
(백준 알고리즘 문제풀이) 14003번 가장 긴 증가하는 부분 수열 5 (0) | 2022.07.07 |
(백준 알고리즘 문제풀이) 12738번 가장 긴 증가하는 부분 수열 3 (0) | 2022.07.07 |
(백준 알고리즘 문제풀이) 12015번 가장 긴 증가하는 부분 수열 2 (0) | 2022.07.07 |
(백준 알고리즘 문제풀이) 1676번 팩토리얼 0의 개수 (0) | 2022.07.07 |
Comments