오늘의 알고리즘 👍
📝 1. 콜라츠 추측
- 1937년 Collatz란 사람에 의해 제기된 이 추측은,
주어진 수가 1이 될 때까지 다음 작업을 반복하면,
모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
- 1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
- 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
▷ 내 풀이
function solution(num) {
let count = 0;
let qqq = num;
if (num === 1) {
return 0;
}
for (let i = 0; i <= 500; i++) {
if (qqq !== 1) {
qqq = qqq % 2 === 0 ? qqq / 2 : qqq * 3 + 1;
count++;
} else {
break;
}
}
if (count < 500) {
return count;
} else {
return -1;
}
}
▷ 수업 코드
function solution(num) {
let count = 0;
for (let i = 0; i < 500; i++) {
if (num === 1) {
break;
}
count++;
if (num % 2 === 0) {
num = num / 2;
} else {
num = num * 3 + 1;
}
}
return num !== 1 ? -1 : count;
}
▷ forEach 매서드 사용 코드
function solution(num) {
let answer = 0;
new Array(500).fill(1).forEach((el) => {
if (num !== 1) {
answer++;
num = num % 2 === 0 ? num / 2 : num * 3 + 1;
}
});
return num !== 1 ? -1 : answer;
}
2. 두 개 뽑아서 더하기
- 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서
만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
▷ 내 풀이
▷ 해결 못함 ❌
function solution(numbers) {
let qqq = numbers;
let zzz = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = 0; j < numbers.length; j++) {
if (qqq[i] + qqq[i] !== qqq[j] + qqq[j]) {
if (zzz[i] === zzz[i + j]) {
zzz.push(qqq[i] + qqq[j]);
}
}
}
}
return zzz;
}
▷ 수업 코드
function solution(numbers) {
const answer = [];
for (let i = 0; i < numbers.length; i++) {
for (let l = i + 1; l < numbers.length; l++) {
let sum = numbers[i] + numbers[l];
if (!answer.includes(sum)) {
answer.push(sum);
}
}
}
return answer.sort((a, b) => a - b);
}
▷ set 매서드 사용 코드
function solution(numbers) {
const answer = new Set([]);
for (let i = 0; i < numbers.length; i++) {
for (let l = i + 1; l < numbers.length; l++) {
let sum = numbers[i] + numbers[l];
answer.add(sum);
}
}
return Array.from(answer).sort((a, b) => a - b);
}
▷ forEach 매서드 사용 코드
function solution(numbers) {
const answer = new Set([]);
numbers.forEach((num1, i) => {
numbers.slice(i + 1, numbers.length).forEach((num2) => {
const sum = num1 + num2;
answer.add(sum);
});
});
return Array.from(answer).sort((a, b) => a - b);
}
출처: 프로그래머스
출처: 코드캠프