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 |
Tags
- plug-and-play
- research intern
- ami lab
- ddim inversion
- Programmers
- 코딩테스트
- 논문리뷰
- DP
- ddpm inversion
- visiontransformer
- video generation
- diffusion models
- transformer
- magdiff
- 3d generation
- diffusion
- video editing
- image2image translation
- Vit
- 코테
- 프로그래머스
- 3d editing
- style align
- 네이버 부스트캠프 ai tech 6기
- Python
- image generation
- image editing
- prompt2prompt
- BOJ
- VirtualTryON
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 |