프로그래머스 코딩테스트 [콜라츠 추측] javascript

Louis·2023년 12월 14일
0
post-thumbnail

안녕하세요!

오늘은 오랜만에 코딩테스트 리뷰로 돌아왔습니다

무슨일 있냐구요?

아뇨.. 그냥 할 공부가 갑자기 많아져서 조금이지만 많이 힘든 요즘 입니다 뭐 어떻게 하겠습니다 개발자 해보겠다고 부트캠프에 참여한건데... 버텨야죠...

네 그러면 바로 리뷰 시작하겠습니다...ㅎ

문제

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

활용된 주요 코드

for, if 코드를 활용하여 반복을 통해 문제를 해결했습니다

나의 풀이

function solution(num) {
    var answer = 0;
    for (i = 0; i <= 500; i++) {
    if(num !== 1) {
       num = num % 2 === 0 ? num / 2 : num * 3 + 1;
    } else {
        return answer = i;
    }
    
}
    return answer = -1;
}

문제 해석

먼저 반복 작업을 진행해야된다고 생각했고 그래서 for문을 생각했습니다

문제에 나온 것 처럼 500번 반복이라는 말이 나왔기 떄문에 for문 조건을 해당 코드처럼 작성하였고

if문을 활용하여 코드를 이어나갔습니다

홀수와 짝수를 구분해야되는데 중요했기 때문에

num % 2 === 0 코드로 짝수가 맞으면 num / 2 홀수로 진행된다면 num * 3 + 1 을 진행해주었습니다

이 때 주어진 수가 1인 경우에는 0을 해줘야한다고 했기 때문에

for문 조건식에 num !== 1 이 들어가게 됩니다

그게 아니라면 -1을 반환해달라는 코드를 작성하여 코딩테스트를 마무리할 수 있었습니다

이렇게 된다면

이렇게 정답을 받아보실 수 있습니다 ㅎ

네 오늘은 for, if를 사용하여 코딩테스트를 풀어봤는데요

네 그렇습니다 겨우 잡은 저의 멘탈이 이렇게 쉽게 다시 망가질 줄 몰랐습니다... 뭐 세상 사는게 다 그런 것 아니겠습니까...

그래요... 위로가 필요한 요즘입니다...

망곰이 처럼 시원하게 한 번 울어봤으면 좋겠습니다..

네.. 오늘은 좀 텐션이 많이 낮네요 얼른 자러 가야겠습니다

오늘은 행복해지자는 말은 못 할 것 같은 하루입니다

여러분들은 그래도 저처럼 무너지지 마시고 꼭 힘내셔서 행복해지세요!

profile
디자이너의 코딩 도전👍🏻

0개의 댓글