[프로그래머스] Lv 1. 콜라츠 추측

morecodeplease·2024년 3월 19일
0

프로그래머스

목록 보기
16/23
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을 반환해 주세요.

🍗 제한 사항

  • 입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.

🎁 입출력 예시

  • 입출력 예 #1
    문제의 설명과 같습니다.

  • 입출력 예 #2
    16 → 8 → 4 → 2 → 1 이 되어 총 4번 만에 1이 됩니다.

  • 입출력 예 #3
    626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야 합니다.


😎 나의 풀이

function solution(num) {
  let answer = 0;
  
  while (num != 1) { 
      if (num % 2 == 0) { 
          num /= 2; 
      } else { 
          num = (num * 3) + 1; 
      }
      answer += 1; 
  }
  if (answer >= 500) { 
      return -1; 
  } else { 
      return answer; 
  }
}
  1. num이 1이 되면 while문이 종료 된다.
  2. num이 짝수라면 2로 나눠준다.
  3. num이 홀수라면 num에 3을 곱하고 1을 더해준다.
  4. 연산을 실행하고 answer에 1씩 누적해서 횟수를 세어준다.
  5. 시도 횟수가 500보다 크거나 같으면 -1을 return하고 아니라면 시도 횟수인 answer를 return 해준다.

🧵 다른 풀이

function collatz(num) { // 베스트 풀이 
  var answer = 0;
  while(num !=1 && answer !=500){
      num%2==0 ? num = num/2 : num = num*3 +1;
  answer++;
}
  return num == 1 ? answer : -1;
}
  1. 횟수를 카운트할 answer 생성
  2. while문의 조건으로 num이 1이거나 answer가 500이면 종료
  3. num이 짝수면 2로 나눈 num을 return, 홀수면 num에 3을 곱하고 1을 더한 num을 return
  4. answer에 하나씩 증가
  5. num이 1이면 answer를 return 하고 아니면 -1 return

내가 푼 풀이를 삼항연산자를 이용해서 아주 간단하게 표현한 풀이를 보고 좀 더 간결하게 코드를 작성하는 방법을 생각해 보아야 겠다.

profile
Everyday's a lesson

0개의 댓글