프로그래머스 : JavaScript 알고리즘 100일 챌린지 8일차
- 프로그래머스 : https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc
- 유트브 참고 : https://www.youtube.com/watch?v=RMmOU2u-_as&list=PLkfUwwo13dlWZxOdbvMhkzhAowaiEjuGS
코딩테스트 입문 Day8
1. 배열 자르기 : 정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
function solution(numbers, num1, num2) {
var answer = [];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
numbers | num1 | num2 | result |
[1, 2, 3, 4, 5] | 1 | 3 | [2, 3, 4] |
[1, 3, 5] | 1 | 2 | [3, 5] |
답 확인하기
function solution(numbers, num1, num2) {
let cnt = num1;
let answer = [];
while(cnt <= num2){
answer.push(numbers[cnt])
cnt++;
}
return answer;
}
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 배열 numbers에서 num1부터 num2까지의 범위에 해당하는 요소들을 추출하여 배열로 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 세 개의 인자를 전달해야 합니다. 첫 번째 인자는 배열이고, 두 번째 인자와 세 번째 인자는 추출할 범위를 나타내는 숫자입니다.
함수 내에서 cnt라는 변수를 num1으로 초기화합니다.
빈 배열 answer를 생성합니다.
while 루프를 사용하여 cnt가 num2보다 작거나 같은 동안 반복합니다.
numbers 배열에서 cnt 인덱스에 해당하는 요소를 추출하여 answer 배열에 추가합니다.
cnt 값을 1 증가시킵니다.
answer 배열을 반환합니다.
예를 들어, solution([1, 2, 3, 4, 5], 2, 4)를 호출하면 반환 값으로 [3, 4, 5]가 나올 것입니다. numbers 배열에서 인덱스 2부터 4까지의 요소들이 추출되어 배열로 반환됩니다.
2. 외계행성의 나이 : 우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
function solution(age) {
var answer = '';
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
age | result |
23 | "cd" |
51 | "fb" |
100 | "baa |
답 확인하기
function solution(age) {
var answer = '';
const stringAge = String(age);
for(let i=0; i<stringAge.length; i++){
answer += String.fromCharCode(stringAge[i].charCodeAt(0) + 49);
}
return answer;
}
// charCodeAt() : 주어진 인덱스에 대한 UTF-16 코드를 나타내는 0부터 65535 사이의 정수를 반환합니다.
// String.fromCharCode() : UTF-16 코드 유닛으로부터 문자열을 생성해 반환합니다.
// function solution(age){
// var answer = '';
// const stringAge = String(age);
// for(let i=0; i<stringAge.length; i++){
// if(stringAge[i] === '0'){
// answer += 'a';
// }
// if(stringAge[i] === '1'){
// answer += 'b';
// }
// if(stringAge[i] === '2'){
// answer += 'c';
// }
// if(stringAge[i] === '3'){
// answer += 'd';
// }
// if(stringAge[i] === '4'){
// answer += 'e';
// }
// if(stringAge[i] === '5'){
// answer += 'f';
// }
// if(stringAge[i] === '6'){
// answer += 'g';
// }
// if(stringAge[i] === '7'){
// answer += 'h';
// }
// if(stringAge[i] === '8'){
// answer += 'i';
// }
// if(stringAge[i] === '9'){
// answer += 'j';
// }
// }
// return answer;
// }
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 입력된 age 값을 처리하여 변환된 문자열을 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 나이를 나타내는 숫자를 인자로 전달해야 합니다.
answer라는 빈 문자열을 생성합니다.
입력된 age 값을 문자열로 변환한 후 stringAge 변수에 저장합니다.
for 루프를 사용하여 stringAge 문자열의 각 문자에 대해 반복합니다.
각 문자를 Unicode 코드로 변환한 후 49를 더한 값을 문자열로 변환하여 answer에 추가합니다.
최종적으로 변환된 answer 문자열을 반환합니다.
주의: 주어진 코드에서 < 기호(<)가 사용되었는데, 이는 HTML 엔터티로 < 기호를 나타냅니다. JavaScript 코드에서는 일반적으로 < 연산자를 사용하므로 < 기호로 변경하였습니다.
예를 들어, solution(25)를 호출하면 반환 값으로 "3:8"이 나올 것입니다. 25를 문자열로 변환하고, 각 문자의 Unicode 값을 49씩 증가시켜 문자열로 변환한 결과가 "3:8"이 됩니다.
3. 진료순서 정하기 : 외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
function solution(n, k) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
emergency | result |
[3, 76, 24] | [3, 1, 2] |
[1, 2, 3, 4, 5, 6, 7] | [7, 6, 5, 4, 3, 2, 1] |
[30, 10, 23, 6, 100] | [2, 4, 3, 5, 1] |
답 확인하기
function solution(emergency) {
let newEmergency = [];
for(let i=0; i<emergency.length; i++){
newEmergency.push({value: emergency[i], index: i})
}
newEmergency.sort((a,b) => b.value-a.value)
var answer = new Array(emergency.length);
for(let j=0; j<newEmergency.length; j++){
let item = newEmergency[j];
answer[item.index] = j + 1;
}
return answer;
}
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 emergency 배열을 처리하여 새로운 배열을 생성하고 정렬한 후, 정렬된 순서에 따라 인덱스를 할당하여 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, emergency 배열을 인자로 전달해야 합니다.
빈 배열 newEmergency를 생성합니다.
for 루프를 사용하여 emergency 배열의 각 요소에 대해 반복합니다.
각 요소를 {value: emergency[i], index: i} 형태의 객체로 변환하여 newEmergency 배열에 추가합니다.
newEmergency 배열을 value 속성을 기준으로 내림차순으로 정렬합니다.
emergency 배열과 같은 길이의 빈 배열 answer를 생성합니다.
for 루프를 사용하여 정렬된 newEmergency 배열을 순회합니다.
각 요소의 index 값을 이용하여 answer 배열의 해당 인덱스에 순서 값을 할당합니다.
최종적으로 answer 배열을 반환합니다.
예를 들어, solution([5, 3, 2, 6, 1])를 호출하면 반환 값으로 [4, 2, 1, 5, 3]이 나올 것입니다. emergency 배열의 요소들이 객체로 변환되어 newEmergency 배열에 저장되고, 이후 내림차순으로 정렬됩니다. 정렬된 결과에 따라 인덱스 값이 할당되어 answer 배열이 생성됩니다. 반환되는 answer 배열은 각 요소가 입력된 emergency 배열의 값의 순서를 나타냅니다.
4. 순서쌍의 개수 : 순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
function solution(n) {
var answer = 0;
return answer;
}
길라잡이
- 변수 answer의 데이터를 수정해서 답을 구해보세요.
- 예시
n | result |
20 | 6 |
100 | 9 |
답 확인하기
function solution(n) {
let count = 0;
for (let i = 1; i <= Math.sqrt(n); i++) {
if (n % i === 0) {
// 두 숫자의 곱이 n인 경우를 찾으면 count 증가
count++;
// 숫자가 서로 다른 경우 추가로 count 증가
if (i !== n / i) {
count++;
}
}
}
return count;
}
// Math.sqrt(n) : n의 제곱근을 계산하는 javascript의 내장함수로 숫자 n의 제곱근을 반환합니다.
해설 확인하기
주어진 코드는 solution이라는 함수를 정의하고, 해당 함수는 입력된 숫자 n의 약수의 개수를 계산하여 반환합니다.
함수의 동작을 요약하면 다음과 같습니다:
solution 함수를 호출할 때, 숫자를 인자로 전달해야 합니다.
count라는 변수를 0으로 초기화합니다.
for 루프를 사용하여 i가 1부터 n의 제곱근까지 반복합니다.
n을 i로 나누었을 때 나머지가 0인 경우, 즉 i가 n의 약수인 경우를 찾습니다.
count를 증가시킵니다.
i와 n/i가 서로 다른 경우, 즉 두 숫자의 곱이 n인 경우를 추가로 찾아 count를 증가시킵니다.
최종적으로 count 값을 반환합니다.
예를 들어, solution(12)를 호출하면 반환 값으로 6이 나올 것입니다. 숫자 12의 약수는 1, 2, 3, 4, 6, 12이므로, 약수의 개수는 6이 됩니다.