코딩테스트 40일차
콜라츠 추측
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을 반환해 주세요.
function solution(num) {
var answer = 0; // 작업 횟수를 저장할 변수 초기화
while (num !== 1) { // 주어진 수가 1이 될 때까지 반복
if (answer >= 500) { // 작업을 500번 반복해도 1이 되지 않는 경우
answer = -1; // -1 반환
break;
}
if (num % 2 === 0) { // 주어진 수가 짝수인 경우
num = num / 2; // 2로 나눔
} else { // 주어진 수가 홀수인 경우
num = num * 3 + 1; // 3을 곱하고 1을 더함
}
answer++; // 작업 횟수 증가
}
return answer; // 작업 횟수 반환
}
✏️풀이
answer 변수를 초기화하여 작업 횟수를 저장합니다.
while 반복문을 사용하여 주어진 수 num이 1이 될 때까지 작업을 반복합니다. 반복 조건은 num이 1이 아닌 동안입니다.
반복문 내에서 작업을 수행합니다. num이 짝수인 경우 2로 나누고, 홀수인 경우 3을 곱하고 1을 더합니다.
작업 횟수인 answer를 증가시킵니다.
작업을 수행할 때마다 answer가 500 이상인지 확인하여, 500번의 작업을 반복해도 1이 되지 않는 경우 -1을 할당하고 반복문을 종료합니다.
반복문이 종료되면 answer 값을 반환하여 작업 횟수를 결과로 출력합니다.
짝수와 홀수
정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.
function solution(num) {
var answer = ''; // 결과를 저장할 변수 초기화
if (num % 2 === 0) { // 주어진 수가 짝수인 경우
answer = 'Even'; // "Even" 할당
} else { // 주어진 수가 홀수인 경우
answer = 'Odd'; // "Odd" 할당
}
return answer; // 결과 반환
}
✏️풀이
answer 변수를 초기화하여 결과를 저장합니다.
if 문을 사용하여 주어진 수 num이 짝수인지 홀수인지 판별합니다. 조건식 num % 2 === 0은 num을 2로 나눈 나머지가 0인지 확인하여 짝수 여부를 판별합니다.
num이 짝수인 경우에는 answer에 "Even"을 할당합니다.
num이 홀수인 경우에는 answer에 "Odd"를 할당합니다.
최종적으로 answer 값을 반환하여 결과를 출력합니다.