매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅
문제.
자바(Java) 및 자바스크립트(Javascript) 풀이 방법 및 코드
JAVA Solution 1
// 처음에 풀었던 방식. 중복이 발생하였음
class Solution {
public int solution(int num) {
if (num == 1) {
return 0;
}
long convertedNumber = (long) num;
int result = process(convertedNumber);
return result;
}
public int process(long number) {
int count = 0;
while(number > 1) {
if (number % 2 == 0) {
number /= 2;
count += 1;
if (count == 500) {
return -1;
}
if (number == 1) {
return count;
}
continue;
}
number = number * 3 + 1;
count += 1;
if (count == 500) {
return -1;
}
if (number == 1) {
return count;
}
}
return count;
}
}
JAVA Solution 2
// 두 번째 방식. 풀이를 참조했는데 훨씬 깔끔함. 삼항연산자 역시 활용
class Solution {
public int solution(int num) {
long convertedNumber = (long) num;
int result = process(convertedNumber);
return result;
}
public int process(long number) {
for (int i = 0; i < 500; i += 1) {
if (number == 1) {
return i;
}
number = (number % 2 == 0) ? number / 2 : number * 3 + 1;
}
return -1;
}
}
Javascript Solution
function solution(num) {
let number = num;
for (let i = 0; i < 500; i += 1) {
if (number === 1) {
return i;
}
number = (number % 2 === 0) ? number / 2 : number * 3 + 1;
}
return -1;
}
오늘 풀면서 가장 아쉬웠던 점은 자바스크립트에서 let, for문을 사용한 것.
분명히 재귀 방법으로 풀 수 있는 방법이 있을텐데 찾아내질 못했다... 다음에 같은 문제를 다시 풀게 되는 차수에는 자바스크립트쪽을 깊게 파서 재귀로 해결해보고 싶다.