두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한 사항
• a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
• a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
• a와 b의 대소관계는 정해져있지 않습니다.
function solution(a, b) {
let big = 0
let small = 0
let array = [a,b]
if(a > b){
big = a;
small = b;
} else if(a < b){
big = b;
small = a;
}
for(let i = 1; i<big-small; i++){
array.push(small + i)
}
return a === b ? a : array.reduce((a,b)=>(a+b))
}
// 해설
// 1. 먼저 큰수 작은수 변수 선언을 해줌
// 2. 배열에 일단 받은 변수를 넣어줌
// 3. 받은 인자 중 어느게 큰 수 인지 체크
// 4. for문을 큰수에서 작은수 뺀만큼 돌아서 배열에 작은수에 + 1 해줌
// 5. return으로 만약 받은 인자가 같으면 둘 중 아무거나 return 같지 않으면 만든 배열을 더해줌
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 미만인 정수입니다.
function solution(num) {
let array = []
let number = num
const a = (num) => {
if(num === 1){
return array;
} else if(num % 2 === 0){
number = num / 2;
array.push(number);
return a(number)
} else if (num % 2 === 1){
number = num * 3 + 1;
array.push(number);
return a(number)
}
}
a(num)
return array.length > 500 ? -1 : array.length
}
// 해설
// 1. 빈배열 하나 생성
// 2. number에 num을 할당
// 3. a 라는 함수를 하나 만들어서 해당 조건이 될 때까지 재귀 함수를 돌리기
// 4. a함수는 1이면 array 변수를 반환 그게 아니라 짝수면 인자를 2로 나누고 array에 나눈 값을 추가 그리고 재귀함수로 한번더 a 함수를 순회 / 홀수면 인자에 3을 곱한 후 1을 더하고 array에 해당 값을 추가 그리고 재귀함수로 한번더 a 함수를 순회
오늘도 힌트 안보고 머리 쥐어짜서 해결했다... 재귀함수 옛날에 사용한 기억이 있어서 덕분에 문제 겨우 풀었다 ㅠㅜㅠㅜ 1시간 동안 2문제라니... 2번 문제는 다른 사람들은 어떻게 풀었는지 너무 궁금하다