풀이 방법
짝수일 경우와 홀수일 경우에서 주어진 조건대로 연산해준다.
그 과정을 거치면서 num이 1이 될 때의 answer를 출력해주는데 int의 범위에 신경을 써주어야 하는 문제였다.
틀린 코드
class Solution {
public int solution(int num) {
int answer = 0;
int cnt = 0;
while(true) {
if(num == 1 ){
answer = 0;
break;
}
//짝수일 때
if(num % 2 == 0 ){
num = num / 2;
answer++;
if(answer >= 500) {
answer = -1;
break;
}
if(num == 1) {
break;
}
}
//홀수일 때
if(num % 2 == 1) {
num = (num * 3) + 1;
answer++;
if(answer >= 500) {
answer = -1;
break;
}
if(num == 1) {
break;
}
}
}
return answer;
}
}
3번째 테스트 케이스에서 시간 초과가 떴다.
테스트 케이스 3번인 626331을 계산할 때 int의 범위를 넘어서기 때문에 long으로 고쳐줘야 한다.
정답 코드
class Solution {
public int solution(long num) {
int answer = 0;
while(true) {
//1이면 바로 0을 return
if(num == 1 ){
answer = 0;
break;
}
//짝수일 때
if(num % 2 == 0 ){
num = num / 2;
answer++;
//1이 되면 멈춘다
if(num == 1) {
break;
}
}
//홀수일 때
if(num % 2 == 1) {
num = (num * 3) + 1;
answer++;
if(num == 1) {
break;
}
}
}
//500 이상이라면 -1
if(answer >= 500) {
answer = -1;
}
return answer;
}
}
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] 크기가 작은 부분문자열.java (1) | 2024.02.01 |
---|---|
[Programmers] 디펜스게임.java (0) | 2024.02.01 |
[프로그래머스] Java Level 1. 서울에서 김서방 찾기 (0) | 2023.05.25 |
[프로그래머스] Java Level 1. 두 정수 사이의 합 (0) | 2023.05.25 |
[프로그래머스] Java Level 1. 하샤드 수 (0) | 2023.05.25 |