문제를 보고 do-while문과 삼항 연산자를 활용해서 계산 횟수를 측정하기로 했다.
그래서 아래와 같이 코드를 작성한 후 테스트를 진행하니
using System;
public class Solution {
public int solution(int num) {
if(num == 1) return 0;
int count = 0;
do{
num = num % 2 == 0 ? num / 2 : num * 3 + 1;
count++;
}while(num != 1);
return count > 500 ? -1 : count;
}
}
테스트 3번에서 오류가 발생하는 것을 발견했다.
이유를 찾고자 Console.WriteLine()을 활용해
Console.WriteLine(num+", "+count);
do-while 내에서
num과 count를 찍어보니
실행 도중 num의 값이 짝수가 아닐 경우 num * 3 + 1을 당해서
int형 범위를 벗어나는 현상을 감지했다.
그래서,
using System;
public class Solution {
public int solution(long num) {
if(num == 1) return 0;
int count = 0;
do{
num = num % 2 == 0 ? num / 2 : num * 3 + 1;
count++;
}while(num != 1);
return count > 500 ? -1 : count;
}
}
위와 같이 int 형 매개변수 num을 long 타입으로 변경해서 다시 테스트를 진행한 결과
위와 같이 모든 테스트를 통과할 수 있었다.
'문제 풀기 > C#' 카테고리의 다른 글
25. 나누어 떨어지는 숫자 배열( .Where() 함수, 배열 생성 및 값 할당 ) (0) | 2025.01.16 |
---|---|
24. 서울에서 김서방 찾기(Array.IndexOf(), Array.FindIndex() 함수) (0) | 2025.01.15 |
22. 두 정수 사이의 합 (Math Class 사용 방법) (1) | 2025.01.15 |
21. 하샤드 (ToCharArray()(문자열 문자로 나누기)) (0) | 2025.01.14 |
20. 정수 내림차순으로 배치하기(정렬 함수) (0) | 2025.01.14 |