프로그래머스 : JavaScript 알고리즘 Level.1 4일
프로그래머스 : JavaScript 알고리즘 Level.4
1. 두 정수 사이의 합 : 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
function solution(a, b) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
a | b | return |
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
답 확인하기
function solution(a, b) {
var answer = 0;
if(a>=b){
for(let i=b; i<=a; i++){
answer+=i;
}
}else{
for(let j=a; j<=b; j++){
answer+=j;
}
}
return answer;
}
해설 확인하기
코드는 두 개의 숫자 a와 b를 인자로 받아서, 두 숫자 사이의 모든 정수를 더한 값을 반환하는 JavaScript 함수입니다. 함수명은 solution입니다.
함수 내부의 동작을 설명하겠습니다:
먼저, answer라는 변수를 0으로 초기화합니다. 이 변수는 최종 결과값을 저장할 용도로 사용됩니다.
if (a >= b) 문으로 시작합니다. 이것은 a가 b보다 크거나 같은 경우를 처리하는 블록입니다. 만약 a와 b가 같은 경우에도 이 블록이 실행됩니다.
첫 번째 for 루프: for (let i = b; i <= a; i++)로, b부터 a까지의 모든 정수를 더하는 작업을 수행합니다. i 변수가 b부터 시작하여 a까지 반복하면서 각각의 값을 answer에 누적하여 더합니다.
else 문으로 이동합니다. 이것은 a가 b보다 작은 경우를 처리하는 블록입니다.
두 번째 for 루프: for (let j = a; j <= b; j++)로, a부터 b까지의 모든 정수를 더하는 작업을 수행합니다. j 변수가 a부터 시작하여 b까지 반복하면서 각각의 값을 answer에 누적하여 더합니다.
누적된 결과값 answer를 반환합니다.
이 코드는 주어진 두 숫자 a와 b 사이의 모든 정수를 더하는 기능을 올바르게 수행합니다.
2. 콜라츠 추측 : 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;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
n | result |
6 | 8 |
16 | 4 |
626331 | -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;
}
}
해설 확인하기
코드는 Collatz(콜라츠) 추측을 이용하여 주어진 숫자를 1로 만드는 데에 필요한 연산 횟수를 반환하는 JavaScript 함수입니다. 함수명은 solution이며, 숫자 하나인 num을 인자로 받습니다.
Collatz 추측에 따라서 주어진 숫자 num을 다음과 같이 반복적으로 처리합니다:
주어진 숫자 num이 1이 될 때까지 반복하는 while 루프를 실행합니다. 초기에 answer 변수는 0으로 초기화되어 있습니다.
각 반복에서는 현재 숫자 num이 짝수인지 홀수인지 확인합니다. 짝수라면 num을 2로 나눕니다. 홀수라면 num에 3을 곱하고 1을 더합니다. 이렇게 하여 num을 새로운 값으로 갱신합니다.
각 반복에서 answer 변수를 1씩 증가시킵니다. 이 변수는 반복된 횟수를 기록하는데 사용됩니다.
반복이 끝난 후, num이 1이 되었을 때의 반복 횟수인 answer를 반환합니다.
그러나 주의해야 할 부분이 있습니다. Collatz 추측은 언제나 1로 수렴하는 것으로 알려져 있지만, 이 코드에서는 반복이 500회를 넘어가면 -1을 반환하도록 처리되어 있습니다. 이는 입력값 num이 매우 큰 수일 때 무한 반복을 방지하기 위한 제한 조건으로 사용되었습니다.
따라서 이 함수는 입력값 num을 Collatz 추측에 따라 1로 수렴시키는데 필요한 반복 횟수를 반환합니다. 그러나 500회 이상의 반복이 필요한 경우 -1을 반환합니다.
3. 서울에서 김서방 찾기 : String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
function solution(seoul) {
var answer = '';
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
seoul | return |
["Jane", "Kim"] | "김서방은 1에 있다" |
답 확인하기
function solution(seoul) {
if (seoul.length){
let kims = seoul.indexOf('Kim')
return '김서방은 '+kims+'에 있다'
}
}
해설 확인하기
코드는 seoul이라는 배열에 "Kim"이라는 문자열이 포함되어 있는 경우, "김서방은 (인덱스)에 있다"라는 메시지를 반환하는 JavaScript 함수입니다. 함수명은 solution이며, seoul은 문자열을 원소로 가지는 배열입니다.
함수 내부의 동작을 설명하겠습니다:
먼저, if (seoul.length) 문으로 시작합니다. 이것은 seoul 배열의 길이가 0이 아닌 경우에만 실행됩니다. 즉, 배열에 원소가 있는 경우에만 아래의 코드 블록을 수행합니다.
let kims = seoul.indexOf('Kim')으로, "Kim"이라는 문자열의 인덱스를 찾아서 kims 변수에 저장합니다. 배열에서 "Kim"이 처음으로 나타나는 인덱스를 반환합니다.
return '김서방은 '+kims+'에 있다'로, "김서방은 (인덱스)에 있다"라는 문자열을 반환합니다. 여기서 kims 변수에 저장된 인덱스를 문자열에 포함하여 반환합니다.
이 함수는 주어진 seoul 배열에서 "Kim"이라는 문자열이 있는 경우 해당 인덱스를 반환하는 기능을 수행합니다. 하지만 배열에 "Kim"이 없는 경우에는 아무런 결과를 반환하지 않습니다(즉, undefined가 반환됩니다). 이 부분을 처리하기 위해 함수에 추가적인 로직을 추가하는 것이 좋을 수도 있습니다. 예를 들어, "Kim"이 없을 경우에 대한 오류 처리나 메시지를 추가하는 등의 방법으로 개선할 수 있습니다.
4. 나누어 떨어지는 숫자 배열 : array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
function solution(arr, divisor) {
var answer = [];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
arr | divisor | return |
[5, 9, 7, 10] | 5 | [5, 10] |
[2, 36, 1, 3] | 1 | [1, 2, 3, 36] |
[3, 2, 6] | 10 | [-1] |
답 확인하기
function solution(arr, divisor) {
var answer = [];
for(i=0; i<arr.length; i++) {
if(arr[i] % divisor == 0) {
answer.push(arr[i]);
}
}
if(answer.length == 0) {
answer.push(-1);
}
answer.sort((a,b) => a - b);
return answer;
}
해설 확인하기
코드는 배열 arr과 정수 divisor를 인자로 받아서, 배열 arr에서 divisor로 나누어 떨어지는 숫자들을 오름차순으로 정렬하여 반환하는 JavaScript 함수입니다. 함수명은 solution이며, arr은 숫자들을 원소로 가지는 배열이고, divisor는 나누는 수로 사용됩니다.
함수 내부의 동작을 설명하겠습니다:
먼저, 빈 배열 answer를 선언하여 결과를 저장할 준비를 합니다.
for 루프를 사용하여 arr 배열을 순회합니다. 각 숫자 arr[i]가 divisor로 나누어 떨어지는지 검사합니다.
만약 arr[i] % divisor == 0이 참인 경우, 즉 arr[i]가 divisor로 나누어 떨어지는 경우에는 answer 배열에 해당 숫자를 추가합니다. 이렇게 하면 answer 배열에는 divisor로 나누어 떨어지는 숫자들이 저장됩니다.
answer 배열의 길이를 검사하여, answer 배열에 원소가 없는 경우 (나누어 떨어지는 숫자가 없는 경우)에는 -1을 answer 배열에 추가합니다.
마지막으로, answer 배열을 오름차순으로 정렬하고, 정렬된 answer 배열을 반환합니다.
이 함수는 주어진 arr 배열에서 divisor로 나누어 떨어지는 숫자들을 오름차순으로 정렬하여 반환하는 기능을 수행합니다. 만약 divisor로 나누어 떨어지는 숫자가 없는 경우에는 -1만을 원소로 가지는 배열을 반환합니다.