입력 조건을 읽어보세요
11053번 - 가장 긴 증가하는 부분 수열
넵. 조건 읽어보았습니다.
제 잘못된 코드에서는 dp[x] 를 x까지 증가하는 수열의 길이라고 정했습니다.
그러니 입력된 배열 A 를 읽으면서 만약에 80이 읽혔다치면
dp[1] ~ dp[79] 중 최대값 + 1 을 dp[80] 에 저장하는 겁니다.
제가 감히 생각하기엔 이게 시간초과도 없이 통과한 이유가
배열 길이도 1000이고 Ai 의 최대값도 1000 이기 때문인 것 같은데요.
그래서 이런 식의 코드를 틀리게 처리하기 위해 Ai 의 최대값을 1000보다 큰 수로 하면 어떨까 하는 요청이었습니다.
혹시라도 제 의견에 틀린 점이 있다면 말씀해주세요. 감사합니다.
@jkjan 님의 풀이는 이 문제에서 A_i 의 최대값 조건을 활용한 적절한 풀이고 수정할 필요가 없습니다.
오히려 수정하는 것이 이 조건을 활용하여 푼 다른 사람을 틀리게 만듭니다.
댓글을 작성하려면 로그인해야 합니다.
jkjan 4년 전
LIS 알고리즘의 존재 자체를 모르고 풀엇다가 이 코드로 정답을 맞았는데
알고리즘을 보고나니까 이 코드는 통과하면 안 되겠더라구요.
LIS 알고리즘에서 dp[x] 는 x번째가 마지막이 되는 LIS의 길이인데
제 코드에서 dp[x] 는 x까지 만들어진 LIS의 길이입니다.
그러니 for 문에서 x 를 배열 안에서 찾아야 하는데
저기서는 1까지 다 뒤진 겁니다.
원소 개수도 1000 이하고 각 원소 크기도 1000 이하라서 되는 것 같습니다.
이 코드는 원소의 크기가 만일 10000이었다면 시간초과로 틀렸을 코드입니다.
제가 잘못된 풀이를 해서 자진신고합니다.