haggie   5년 전

아래는 제가 처음에 생각해낸 코드인데, 시간초과가 떠서 정답처리를 못 받았습니다. 아래 square함수를

int square(int* dp, int n) {

   if (dp[n] > 0) {

     return dp[n]; 

   } else {

     int min = n;

     for (int i = 1; pow(i, 2) < n; i++){

       if (min > square(dp,n - (int)pow(i, 2)) + 1) {

         min = square(dp,n - (int)pow(i, 2)) + 1; 

       }

    }

    dp[n] = min;

    return dp[n];

    }

 }

이렇게 바꾸니까 정답처리가 되었습니다. 차이점을 알고 싶습니다.. 이상하게도 비주얼스튜디오에서 인풋을 9999를 넣으면 둘다 안되는데 어떻게 위 코드는 정답처리가 되었는지 모르겠습니다. 이러면 사실은 틀린건가요?? 부탁드립니다!

adfsfsf   5년 전

위의 것으로 제출해보았는데 정답처리 됩니다. 뭔가 잘못 입력하신 것 같습니다. 그게 아니면 컴파일러에 문제가 있어서 제출시마다 결과가 달라지는 듯합니다. 그리고 팁을 드리자면, dp값을 i값이 낮은 값부터 채워넣으셨기 때문에 dp[n - (int)pow(i, 2)] 값이 항상 채워져 있으므로 굳이 재귀적으로 쓰실 것 없이 아래와 같이 쓰셔도 됩니다.

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