-Code
n = int(input())
nums = list(map(int, input().split()))
dp = [1] * n
for i in range(n):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
l = max(dp)
print(l)
result = []
for i in range(n - 1, -1, -1):
if dp[i] == l:
l -= 1
result.append(nums[i])
print(*reversed(result))
1) 처음 코드
n = int(input())
nums = list(map(int, input().split()))
result = []
for i in range(n):
temp = []
for j in range(i):
if nums[i] > nums[j]:
if nums[j] not in temp:
temp.append(nums[j])
temp.append(nums[i])
if len(result) < len(temp):
result = temp
print(*result)
처음에는 위와 같이 짜서 입출력은 맞았으나 틀려서 다른 방법을 찾아봤습니다.
2) 두 번째 코드
n = int(input())
nums = list(map(int, input().split()))
result = [1]
for i in range(n):
temp = [nums[i]]
for j in range(i + 1, n):
if temp[-1] < nums[j]:
temp.append(nums[j])
if len(result) < len(temp):
result = temp
print(len(result))
print(*result)
두 번째로 짠 코드는 게시판의 반례들을 여러 개 넣어도 값이 맞게 나와서 제출했으나 틀려서 결국 찾아보니 최장 증가수열 알고리즘을 dp로 받고 역순으로 검사하여 수를 저장하는 방식이어서 원래 식에서 조금 바꿔보면 해결이 되는데 못한 것이 아쉬웠고 다른 두 코드의 문제점을 찾지 못해서 아쉬웠습니다.
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬] 2909번 캔디 구매 (0) | 2022.05.29 |
---|---|
[백준/파이썬] 2628번 종이자르기 (0) | 2022.05.28 |
[백준/파이썬] 1913번 달팽이 (0) | 2022.05.28 |
[백준/파이썬] 2578번 빙고 (0) | 2022.05.28 |
[백준/파이썬] 2756번 다트 (0) | 2022.05.28 |