문제대로 500번 이내에 계산이 되면 횟수를 출력하면 된다. (넘어가면 -1)
간단하게 C로 만들어 보았는데
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <stdio.h> #include <stdbool.h> #include <stdlib.h> int solution(int num1) { unsigned long long answer = num1; for (int i = 0; i < 500; i++) { if (answer == 1) return i; if (answer % 2 == 0) { answer /= 2; } else { answer = answer * 3 + 1; } } return -1; } void main() { printf("%d\n", solution(626331)); } | cs |
이런 결과가 나온다.
그런데 626331의 경우에 처음에 answer 변수의 타입을 int로 했었다.
그럼 488번째 for문에서 1이 되는데, 답이 달라서 해답을 찾아봤다.
곱셈 연산쪽에서 오버플로우가 발생한다고 long 타입을 사용하라 해답에 있었지만
그냥 long으로도 안돼서 그냥 더 큰 더블 Long으로 해결하였음
댓글 없음:
댓글 쓰기