jhhh2222   3년 전

일단 리스트 크기는 혹시 몰라 넉넉하게 해뒀습니다.

제가 생각한 풀이는 

3의 배수일때는 무조건 3으로 나누거

2의 배수일때 -1을 했을때 3의 배수가 되면 -1

                     -1을 해도 3의 배수가 안되면 2로 나눔

이렇게 생각했습니다.                      

제가 생각한 식이 잘못된것인가요?

harinboy   3년 전

생각하신 알고리즘은 2049에 대해서 13이라는 틀린 답을 냅니다.

2049->2048->계속 2로 나누기를 하면 12번만에 1이 될 수 있습니다.

이 문제는 어떤 규칙을 세워서 푸는 것을 의도하지 않은 것으로 압니다. 

전혀 모르겠다면 다이나믹 프로그래밍에 대해서 생각해보세요.

그리고 그냥 팁인데 백준 채점 시스템에서 프로그램이 출력할 때 마지막의 공백/줄바꿈은 무시합니다.

즉, 34~37번째 줄 없이 printf("%d ", num_list[i]); 해도 된다는 뜻입니다.

jhhh2222   3년 전

아 그렇군요 ! 

마지막 팁도 너무 도움되네요 감사합니다!!

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