n = int(input())
arr = list(map(int, input().split()))
dp = [[0] for i in range(n)]
dp[0] = [arr[0]]
for i in range(1, n):
if arr[i] > dp[i-1][-1]:
dp[i] = dp[i-1] + [arr[i]]
else:
dp[i] = dp[i-1]
print(len(dp[-1]))
주어진 수열의 0인덱스가 최솟값이 아닐 수도 있는데 주어진 수열의 0을 지정해버리는 실수를 했습니다.
N = int(input())
arr = list(map(int, input().split()))
dp = [1] * N
for i in range(1, N):
if max(arr[:i]) < arr[i]:
dp[i] = max(dp[i], dp[i-1] + 1)
dp[i] = max(dp[i], dp[i-1])
print(dp[-1])
dp에 주어진 n개의 수열에서 나오는 최대수열갯수를 저장하고싶어서 위처럼 작성해보았지만 계속 틀렸다고 뜹니다.
못찾은 반례가 있나봅니다.
검색해서 나온 값들은 3가지 수로 10 20 10이 주어졌을 때 dp[-1]이 1이 출력되어 왜 2가 아니라 1인지 의아하여 작성해보았는데 무수한 오답처리만 받고 끝났습니다.
N = int(input())
arr = list(map(int, input().split()))
dp = [1] * N
for i in range(N):
for j in range(i):
if arr[j] < arr[i]:
dp[i] = max(dp[i], dp[j]+1)
print(max(dp))
'길이'를 구하는 문제인데 수열 자체를 구하려다보니 꼬였던 것 같습니다.
우선 증가하는 수열의 최소길이는 1이므로 dp의 모든 요소를 1로 맞춰줍니다.
dp의 최대길이는 입력받은 수의 갯수와 같으므로 * N 을 해주었습니다.
이어서 지정한 수(arr[i])와 그 이전의 수들(arr[j])을 비교하여 증가하는 수열일 때, 길이의 최댓값을 구해줍니다.
만약 arr[i]가 이전의 수들보다 크다면 증가하는 수열이 될 수 있으므로 dp[j] +1을 해줍니다.
하지만 이를 반복하면 중복실행되어 오답이 나올 수 있으므로 max()함수를 이용하여
dp[i]에 새로운 값이 지정되지 않았다면 1일테니 max(dp[i], dp[j]+1)을 해줍니다.