생각하신 알고리즘은 2049에 대해서 13이라는 틀린 답을 냅니다.
2049->2048->계속 2로 나누기를 하면 12번만에 1이 될 수 있습니다.
이 문제는 어떤 규칙을 세워서 푸는 것을 의도하지 않은 것으로 압니다.
전혀 모르겠다면 다이나믹 프로그래밍에 대해서 생각해보세요.
그리고 그냥 팁인데 백준 채점 시스템에서 프로그램이 출력할 때 마지막의 공백/줄바꿈은 무시합니다.
즉, 34~37번째 줄 없이 printf("%d ", num_list[i]); 해도 된다는 뜻입니다.
jhhh2222 3년 전
일단 리스트 크기는 혹시 몰라 넉넉하게 해뒀습니다.
제가 생각한 풀이는
3의 배수일때는 무조건 3으로 나누거
2의 배수일때 -1을 했을때 3의 배수가 되면 -1
-1을 해도 3의 배수가 안되면 2로 나눔
이렇게 생각했습니다.
제가 생각한 식이 잘못된것인가요?