문제 사이트 링크 : https://programmers.co.kr/learn/courses/30/lessons/12943
내 풀이
let sum=0;
do{
if(num==1){break;}
//만약 num이 1이면 do문을 빠져나간다
else{
num=((num%2)==0)?Math.floor(num/2):((num*3)+1);
//조건이 짝수일때 --> 참이면 2로 나눔, 거짓이면 3을 곱하고 1을 더함
sum++;
//do문을 돌린 횟수
}
}while(num!=1)
//언제까지? num이 1이 아닐때까지
answer=(sum>=500)?(answer=-1):(answer=sum);
//sum이 500을 넘어가면 -1을 반환하고 아니면 sum을 반환한다
return answer;
}
do while문을 짤때까지는 짧고 간략하게 썼다! 라고 생각했는데 num이 1일 경우랑 sum이 500을 넘을 경우를 작성하다보니 코드가 길어졌다. 뭔가 정리하고 싶은데 방법을 모르겠다.
다른 사람의 풀이 보기 : 삼항연산자로 풀기
function solution(num, count){
return num==1?(count>=500?-1:count):solution(num%2==0?num/2:num*3+1,++count);
}
조건 | num==1 | ||
'참'일 경우 | (count>=500?-1:count) | 조건 | count>=500 |
'참'일 경우 | -1 | ||
'거짓일 경우 | count | ||
'거짓'일 경우 | solution(num%2==0?num/2:num*3+1,++count); | 조건 | num%2==0 |
'참'인 경우 | num/2 | ||
'거짓'일 경우 | num*3+1,++count |
다른 사람의 풀이 보기 : while로 풀기
function solution(num){
let answer=0;
while(num!=1 && answer!=500){
num = (num%2==0 ? num/2 : (num*3)+1);
answer++;
}
return num==1? answer:-1;
}
console.log(solution(6))
do while말고 while만으로도 풀 수가 있구나 오우 세상에. 그럼 do while이랑 뭐가 다른걸까.
'실천하기 > 코딩테스트' 카테고리의 다른 글
[220111] Lv.1 / 짝수와 홀수 (0) | 2022.01.11 |
---|---|
[220110] Lv.1 / 최소공배수, 최대공약수 구하기 (0) | 2022.01.11 |
[220108] Lv.1 평균값 구하기 (0) | 2022.01.08 |
[220108] Lv.1 / 하샤드의 수 (0) | 2022.01.08 |
[220107] Lv.1 / 핸드폰 번호 가리기 (0) | 2022.01.07 |
댓글