4일차 → 콜라츠 추측(while 반복문)
본문 바로가기
항해 중/2주차 알고리즘(프로그래머스)

4일차 → 콜라츠 추측(while 반복문)

by 은돌1113 2021. 11. 11.

문제설명

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

 

작업은 다음과 같습니다.

예를 들어 입력한 수가 6이라면 6->3->10->5->16->8->4->2->1이 되어 총 8번만에 1이 됩니다.

위 작업을 몇번이나 반복 해야 하는 지 반환하는 함수

단, 작업을 500번 반복해도 1이 되지 않는다면 -1을 반환 해주세요.

 

제한사항

- 입력한 수, num은 1 이상 8000000 미만인 정수입니다.

 

내가 푼 문제 풀이

function solution(num) {
    
    let answer = 0; // 몇번 반복 했는 지 담는 변수

    while(num!=1){
      if(answer == 500){
        return -1
      }else{
        (num%2==0)?num=num/2 : num=num*3+1
        answer++
      }
    }

    return answer;
}

1) answer 변수에는 몇번 반복 했는 지 횟수를 담는다.

2) num이 1이 될 때까지 반복문을 돌린다.(whilte(num!=1)

3) while문 안에 if문을 넣어서 answer가 500번이 되면 -1을 return 해서 함수를 끝낸다.

else인 경우 삼항연산자를 사용해서 콜라프의 추측 작업을 실행하고 횟수를 ++(1씩 늘린다.)

(for문을 사용하지 않은 이유는 조건 범위가 없기 때문이다.)

 

(잘못 생각한 점) 처음에 시도 할 때 if문을 while문 밖에 썼더니 안됐는데 if문을 밖에 썼을 때 500이 아닌 경우에는 조건에 맞을 때까지 while문이 반복하기 때문에 안되는 것이 맞았다. 다음번 부터는 주의!!

 

다른 사람이 푼 문제 풀이

function solution(num) {
    
    let answer = 0; // 몇번 반복 했는 지 담는 변수

    while(num!=1 && answer != 500){
        (num%2==0)?num=num/2 : num=num*3+1
        answer++
    }

    return num == 1? answer : -1;
}

 

https://programmers.co.kr/learn/courses/30/lessons/12943

 

코딩테스트 연습 - 콜라츠 추측

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

programmers.co.kr

 

댓글