코딩테스트 - JAVA/프로그래머스 Programmers
18. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 콜라츠 추측 / 다른 사람의 풀이
Cucum
2022. 4. 29. 17:35
https://programmers.co.kr/learn/challenges
프로그래머스 코딩테스트 연습 Level.1 - 콜라츠 추측
풀이
class Solution {
public int solution(long num) {
int answer = 0;
// num 이 1이 될 때까지 반복(while)
while(num != 1) {
if (num % 2 == 0) { // num이 짝수이면
num /= 2; // 2 나누기
answer++;
if (num == 1) { // 이때 num이 1이 되면 break
break;
}
}
if (num % 2 != 0) { // num이 홀수이면
num = num * 3 + 1; // 3 곱하고 1 더하기
answer++;
if (num == 1) { // 이때 num이 1이 되면 break
break;
}
}
if (answer > 500) { // 500 번 반복(answer 값)보다 많아지면 -1
answer = -1;
break;
}
}
return answer;
}
}
(풀이 실패 과정)
class Solution {
public int solution(int num) {
int answer = 0;
while(num != 1) {
if (num % 2 == 0) {
num /= 2;
answer++;
if (num == 1) {
break;
}
}
if (num % 2 != 0) {
num = num * 3 + 1;
answer++;
if (num == 1) {
break;
}
}
if (answer > 500) {
answer = -1;
break;
}
}
return answer;
}
}
홀수 -> 짝수 -> 홀수 -> 짝수 형태를 계속 반복하다보면 num이 int 형이기때문에 오버플로우 발생.
-> num을 long으로 변경하거나, long I = (long) num; 이런식으로 형변환을 해주면 됨
다른 사람의 풀이
삼항 연산자로 간단하게 해결