백준/ Silver 2 문제 , 백준 파이썬 11053 , 가장 긴 증가하는 부분 수열
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
<문제 출처>
https://www.acmicpc.net/problem/11053
------------------------------------------------------------------------------------------------------------------------------
dp 문제이다.
dp=[0 for _ in range(N)]
dp 를 선언해주고 for 중첩을 통해 체크를 해줄거다.
if A[i] > A[j] and dp[i] < dp[j]:
dp[i]=dp[j]
이 코드를 이해해보자.
예시는 10 20 10 30 20 50 이다.
i=0
첫번째 10 은 dp 가 아직 0 이므로 if 조건에 해당하지 않는다.
이후
dp[i]+=1
를 통해 dp[0]은 1이 된다.
dp=[1, 0, 0, 0, 0, 0]
i=1
두번째 20으로 넘어오면 dp[0]=1 인 상태
if 조건문이 성립하므로
dp[1]에 dp[0]=1 의 값을 부여한다.
최종 dp는 dp=[1, 2, 0, 0, 0, 0]
i=2
값이 다시 작아져 10을 만났다.
if 문에 해당하지 않으므로 dp는 그냥 1만 부여된다.
dp=[1, 2, 1, 0, 0, 0]
i=3
30을 만났다. for 문을 돌면서 dp[i] < dp[j] 인 부분에서 if 문 내로 들어간다.
dp[3] 에는 d[1] 의값 2 가 부여되고 최종 dp는
dp=[1, 2, 1, 3, 0, 0]
i=4
10이므로 건너간다.
dp=[1, 2, 1, 3, 1, 0]
i=5
50을 만났다. for 문을 돌면서 dp[5] 에 dp[3] 의 값 3이 부여되고
최종 dp는
dp=[1, 2, 1, 3, 1, 4]
여기까지하면 루프를 다 돈 것이다. 이제 제일 큰 숫자를 출력해줘야하므로 max 를 사용해 4를 꺼내준다.
------------------------------------------------------------------------------------------------------------------------------
정답
import sys
input=sys.stdin.readline
N=int(input())
A=list(map(int,input().split()))
dp=[0 for _ in range(N)]
for i in range(N):
for j in range(i):
if A[i] > A[j] and dp[i] < dp[j]:
dp[i]=dp[j]
dp[i]+=1
print(max(dp))
'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글
백준/ Silver 2 문제 , 백준 파이썬 11722, 가장 긴 감소하는 부분 수열 (0) | 2022.02.04 |
---|---|
백준/ Silver 2 문제 , 백준 파이썬 11055 , 가장 큰 증가 부분 수열 (0) | 2022.02.04 |
백준/ Gold 5 문제 , 백준 파이썬 2110 , 공유기 설치 (0) | 2022.02.04 |
백준/ Silver 3 문제 , 백준 파이썬 2512 , 예산 (0) | 2022.02.03 |
백준/ Silver 3 문제 , 백준 파이썬 1654 , 랜선 자르기 (0) | 2022.02.03 |