Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- transformer
- Vit
- dreammotion
- 3d generation
- style align
- video editing
- diffusion
- controlnext
- visiontransformer
- DP
- video generation
- emerdiff
- diffusion model
- 네이버 부스트캠프 ai tech 6기
- magdiff
- Python
- 3d editing
- controllable video generation
- score distillation
- image editing
- 코딩테스트
- diffusion models
- Programmers
- BOJ
- VirtualTryON
- 논문리뷰
- 코테
- segmenation map generation
- 프로그래머스
- segmentation map
Archives
- Today
- Total
평범한 필기장
[BOJ_Python] 11053_가장 긴 증가하는 부분 수열 본문
https://www.acmicpc.net/problem/11053
내가 생각한 풀이
나는 리스트의 각 지점까지의 증가하는 수열을 직접 만들어서 풀려고 했다. 아래 내 코드를 보면 i번째 이전의 수들을 리스트에 넣으려했다. 그 수가 수열의 마지막 수보다 크면 수열 리스트에 넣어 각 지점까지의 수열의 길이를 다 구하려 했다. 하지만 input 리스트가 1 3 5 100 101 77 78 101이면 마지막 101까지의 증가 수열이 1 3 5 100 101로 되는 반례가 있었다.
import sys
n = int(input())
lst = [0]
lst.extend(list(map(int, sys.stdin.readline().split())))
dp = [0, 1]
for i in range(2, n+1):
answer = [0]
for j in range(1, i):
if answer[-1] < lst[j] < lst[i]:
answer.append(lst[j])
answer.append(lst[i])
dp.append(len(answer)-1)
print(dp)
print(max(dp))
정답 풀이
- 각 지점의 수가 수열의 마지막인 가장 긴 증가 수열의 수열 길이를 구한다.
- i번 째까지의 가장 긴 수열의 길이는 i번 째 수가 i-1번 째 수보다 크면 i-1번 째 수까지의 가장 긴 수열의 길이 중 max에 +1한 값이 된다.
import sys
n = int(input())
lst = list(map(int, sys.stdin.readline().split()))
dp = [1] * n
for i in range(1, n):
for j in range(i):
if lst[j] < lst[i]:
dp[i] = max(dp[i], dp[j] + 1)
print(max(dp))
'코딩 테스트 준비 > BOJ' 카테고리의 다른 글
[BOJ_Python] 9095_1, 2, 3 더하기 (0) | 2023.03.27 |
---|---|
[BOJ_Python] 17626_Four Squares (0) | 2023.03.26 |
[BOJ_Python] 16206_롤케이크 (0) | 2023.03.24 |
[BOJ_Python] 1080_행렬 (0) | 2023.03.23 |
[BOJ_Python] 21314_민겸 수 (0) | 2023.03.22 |