jkjan   4년 전

LIS 알고리즘의 존재 자체를 모르고 풀엇다가 이 코드로 정답을 맞았는데

알고리즘을 보고나니까 이 코드는 통과하면 안 되겠더라구요.

LIS 알고리즘에서 dp[x] 는 x번째가 마지막이 되는 LIS의 길이인데

제 코드에서 dp[x] 는 x까지 만들어진 LIS의 길이입니다.

그러니 for 문에서 x 를 배열 안에서 찾아야 하는데

저기서는 1까지 다 뒤진 겁니다.

원소 개수도 1000 이하고 각 원소 크기도 1000 이하라서 되는 것 같습니다.

이 코드는 원소의 크기가 만일 10000이었다면 시간초과로 틀렸을 코드입니다.

제가 잘못된 풀이를 해서 자진신고합니다.

cheetose   4년 전

입력 조건을 읽어보세요

jkjan   4년 전

@cheetose

넵. 조건 읽어보았습니다.

제 잘못된 코드에서는 dp[x] 를 x까지 증가하는 수열의 길이라고 정했습니다.

그러니 입력된 배열 A 를 읽으면서 만약에 80이 읽혔다치면

dp[1] ~ dp[79] 중 최대값 + 1 을 dp[80] 에 저장하는 겁니다.

제가 감히 생각하기엔 이게 시간초과도 없이 통과한 이유가

배열 길이도 1000이고 Ai 의 최대값도 1000 이기 때문인 것 같은데요.

그래서 이런 식의 코드를 틀리게 처리하기 위해 Ai 의 최대값을 1000보다 큰 수로 하면 어떨까 하는 요청이었습니다.

혹시라도 제 의견에 틀린 점이 있다면 말씀해주세요. 감사합니다.

solarmagic   4년 전

@jkjan 님의 풀이는 이 문제에서 A_i 의 최대값 조건을 활용한 적절한 풀이고 수정할 필요가 없습니다.

오히려 수정하는 것이 이 조건을 활용하여 푼 다른 사람을 틀리게 만듭니다.

djm03178   4년 전

문제에 '반드시 이 방법으로 풀어야 한다'는 건 없습니다. 조건이 주어질 뿐이고, 푸는 사람들은 그 문제에 주어진 모든 조건을 이용하여 그 조건 내에서만 통과하게 코드를 짜면 됩니다.

그 조건을 특정 풀이만 통과하게 하기 위해 마음대로 바꾸는 건 그 조건을 믿고 푼 사람들을 농락하는 일이 됩니다. 물론, 출제자의 요청이나 오래된 문제에 대해 시간이 상대적으로 널널해진 것들의 시간 제한을 바꾸는 일 등은 가끔 일어나기도 합니다.

jkjan   4년 전

입력 조건을 이용해서 푸는 것도 하나의 풀이로 인정받을 수 있다는 말씀들이시네요 제가 생각이 좁았습니다 

좋은 의견 감사드립니다.

댓글을 작성하려면 로그인해야 합니다.