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
- 오픽
- topdown
- 오픽가격
- 이진탐색 #나무 자르기
- stack 스택
- 이진탐색
- 바텀업
- opic
- fibo
- XML
- 탑다운
- ㅂ
- 주석
- dp
- 피보나치수열
- 메모이제이션
- dynamicProgramming
- 오픽노잼공부방법
- XML주석
- 오픽공부법
- English
- 디피
- 오픽점수잘받는방법
- 오픽노잼
- 영어말하기
- 다이나믹프로그래밍
- 영어회화
- 안드로이드
- 안드로이드주석
Archives
RUBY
[백준] 가장 긴 증가하는 부분 수열 4 본문
출처:: www.acmicpc.net/problem/14002
분류:: dp
1. 문제 이해 및 해결과정
- dp[i]=arr[i]까지 수 중 가장 긴 증가하는 부분수열 A = {10, 20, 10, 30, 20, 50} 1) 10까지, 1개 2) 20까지, max( dp[i-1] + if 10>20 +1 , 1) 3) 10까지 , max( dp[i-1] -> 2개, 1(자기자신)) 4) 30까지, max( dp[i-1] + dp의 최대값보다 크다면 |
2. 풀이방법
1. [python] dp
#가장 긴 증가하는 부분 수열 4
#https://www.acmicpc.net/problem/14002
import sys
sys.stdin = open("input.txt","r")
input=sys.stdin.readline
n=int(input())
arr=list(map(int,input().split()))
dp=[1]*(n+1) #최소 자기자신 길이임
for i in range(1,n): #맨 뒤를 기준으로
for j in range(i): #그 앞 항까지
if arr[i]>arr[j]: #기준보다 작은게 있으면
dp[i]=max(dp[i],dp[j]+1)
maxlen=max(dp)
print(maxlen)
lis=[]
for i in range(n-1,-1,-1):
if dp[i]==maxlen: #최대길이인 것 구하기
lis.append(arr[i])
maxlen-=1
print(' '.join(map(str,reversed(lis)))) #lis뒤집음
3. 오답원인
4. 알게된 점
정수형 리스트를 뒤집어서 join으로 출력하기
print(' '.join(map(str,reversed(lis)))) #lis뒤집음
'PS > BOJ' 카테고리의 다른 글
[백준] 이친수 (0) | 2020.10.01 |
---|---|
[백준] 연속합 (0) | 2020.10.01 |
[백준] 일곱난쟁이 (0) | 2020.10.01 |
[백준] 수 이어 쓰기 1 (0) | 2020.10.01 |
[백준] 쉬운 계단 수 (0) | 2020.10.01 |
Comments