본문 바로가기

코딩/Python

[Python] 백준 11053 가장 긴 증가하는 부분

반응형

코드 작성

n = int(input())
dp = [1 for _ in range(1001)]
arr = list(map(int, input().split()))
for i in range(n):
    for j in range(i):
        if arr[i] > arr[j]:
            dp[i] = max(dp[i], dp[j] + 1)
print(max(dp))

코드  풀이

# 문제풀이1

dp 테이블에는 모든 값을 1로 세팅한다.

arr = [10, 20, 10, 30, 20, 50]

예를 들어, dp[3]을 구하기 위해서는

for 구문에서

i = 3, j = 0 일 때 dp[3] = max(dp[3], dp[0] + 1) 임에 따라 2가 된다

i = 3, j = 1 일 때 dp[3] = max(dp[3], dp[1] + 1) 임에 따라 3이 된다 (dp[1]=2)

i = 3, j = 2 일 때 dp[3] = max(dp[3], dp[2] + 1) 임에 따라 3이 된다

 

dp 값은 [1, 2, 1, 3, 2, 4]이다.

 

 

 

# 문제풀이 2

i = 0일 때

  if 조건 만족 안 함, dp[0] = 1

i = 1일 때

  j가 0일 때 if 조건 만족, dp[1] = dp[0] = 1

i = 2일 때

  if 조건 만족 안 함.

  for문 j가 끝나고 dp[2] = dp[2] + 1 = 1

i = 3일 때

  j가 0일 때 if 조건 만족, dp[3] = dp[0] = 1

  j가 1일 때 if 조건 만족, dp[3] = dp[1] = 2

  for문 j가 끝나고 dp[3] = dp[3] + 1

i = 4일 때

  j가 0일때, dp[4] = dp[0] = 1

  for문 j가 끝나고 dp[4] = dp[4] +1

i = 5일 때

  j가 0,1,2,3일때 만족, dp[5] = dp[3] = 3

  for문 j가 끝나고 dp[5] = dp[5] + 1 

 
반응형

'코딩 > Python' 카테고리의 다른 글

[Python] 백준 1699 제곱수의 합  (1) 2022.12.10
[Python] 백준 2475 검증수  (0) 2022.12.09
[Python] 백준 2798 블랙잭  (0) 2022.12.07
[Python] 백준 7568 덩치  (1) 2022.12.07
[Python] 백준 1912 연속합  (0) 2022.12.04