본문 바로가기
프로그래머스 코딩 테스트

프로그래머스 : JavaScript 알고리즘 100일 챌린지 46일차

by dongjin6539 2023. 6. 30.
728x90
반응형

프로그래머스 : JavaScript 알고리즘 100일 챌린지 46일차

 

코딩 기초 트레이닝 Day46

 

 

1. 뒤에서 5등 위로 : 정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

function solution(num_list) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
num_list result
[12, 4, 15, 46, 38, 1, 14, 56, 32, 10] [15, 32, 38, 46, 56]

 

답 확인하기
function solution(num_list) {
    return num_list.sort((a,b) => a-b).slice(5)
}

 

해설 확인하기

코드는 주어진 숫자 리스트를 오름차순으로 정렬한 후, 정렬된 리스트에서 상위 5개의 숫자를 잘라내어 반환하는 함수입니다. 해석해보겠습니다:

function solution(num_list) {: solution이라는 이름의 함수를 선언하고, num_list라는 매개변수를 받습니다. num_list는 숫자들로 이루어진 리스트입니다.

return num_list.sort((a,b) => a-b).slice(5): num_list를 sort() 함수를 사용하여 오름차순으로 정렬합니다. sort() 함수의 매개변수로 (a, b) => a - b 라는 콜백 함수를 전달하였습니다. 이 콜백 함수는 a와 b 두 개의 숫자를 받아서 a - b를 계산한 값을 반환합니다. 이렇게 함으로써 sort() 함수는 숫자를 오름차순으로 정렬할 수 있습니다.

그 다음, slice(5) 메소드를 사용하여 정렬된 리스트에서 인덱스 5부터 끝까지의 부분 리스트를 잘라냅니다. 이 부분 리스트는 원래 리스트에서 상위 5개의 숫자를 포함하게 됩니다.

마지막으로, 잘라낸 부분 리스트를 반환합니다.

예를 들어, solution([8, 3, 2, 9, 7, 1, 5, 4, 6])를 호출하면, 정렬된 리스트 [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 인덱스 5부터 끝까지인 [6, 7, 8, 9]를 반환합니다.

 

2. 전국 대회 선발 고사 : 0번부터 n - 1번까지 n명의 학생 중 3명을 선발하는 전국 대회 선발 고사를 보았습니다. 등수가 높은 3명을 선발해야 하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다. 각 학생들의 선발 고사 등수를 담은 정수 배열 rank와 전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance가 매개변수로 주어집니다. 전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 × a + 100 × b + c를 return 하는 solution 함수를 작성해 주세요.

function solution(rank, attendance) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
rank attendance result
[3, 7, 2, 5, 4, 6, 1] [false, true, true, true, true, false, false] 20403
[1, 2, 3] [true, true, true] 102
[6, 1, 5, 2, 3, 4] [true, false, true, false, false, true] 50200

 

답 확인하기
function solution(rank, attendance) {
    let answer = 0;
    let cnt = 0; // 참여 가능한 상위 3명의 학생을 세기 위한 변수
    
    for (let i = 1; i <= rank.length; i++) {
        let num = rank.indexOf(i); // 학생의 번호를 저장하기 위한 변수
        
        // 출석 가능한 학생의 번호를 등수에 따라 계산 방식에 적용하여 답안을 구합니다.
        if (attendance[num]) {
            answer += num * Math.pow(100, 2 - cnt);
            cnt += 1;
        }
        
        if (cnt === 3) {
            break;
        }
    }
    
    return answer;
}

 

해설 확인하기

코드는 rank와 attendance라는 두 개의 배열을 입력받아서 처리하는 함수입니다. 해석해보겠습니다:

let answer = 0;: answer라는 변수를 0으로 초기화합니다. 이 변수는 최종적으로 반환될 답을 저장하는 역할을 합니다.

let cnt = 0;: cnt라는 변수를 0으로 초기화합니다. 이 변수는 참여 가능한 상위 3명의 학생을 세기 위한 역할을 합니다.

for (let i = 1; i <= rank.length; i++) {: 1부터 rank 배열의 길이까지 반복하는 for 루프입니다. 이 루프는 등수를 나타내는 i 값을 사용하여 학생의 번호를 찾습니다.

let num = rank.indexOf(i);: rank 배열에서 i 값(등수)을 찾아 해당하는 학생의 번호를 저장하는 num 변수를 선언합니다.

if (attendance[num]) {: 만약 attendance 배열에서 num 번째 위치에 해당하는 값이 true라면, 즉 출석이 가능한 학생이라면 아래의 코드를 실행합니다.

answer += num * Math.pow(100, 2 - cnt);: answer에 num에 100의 2 - cnt 제곱을 곱한 값을 더합니다. 이 계산은 등수에 따라 가중치가 부여되어 답을 구하는 방식입니다.

cnt += 1;: 참여 가능한 학생의 수인 cnt를 1 증가시킵니다.

if (cnt === 3) {: 만약 cnt가 3과 같다면, 즉 상위 3명의 학생을 모두 세었다면 루프를 종료합니다.

return answer;: 최종적으로 계산된 answer 값을 반환합니다.

이 함수는 rank 배열과 attendance 배열을 활용하여 출석 가능한 상위 3명의 학생을 선정하고, 그에 따른 가중치를 계산하여 답을 반환하는 기능을 수행합니다.

 

3. 정수 부분 : 실수 flo가 매개 변수로 주어질 때, flo의 정수 부분을 return하도록 solution 함수를 완성해주세요.

function solution(flo) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
flo result
1.42 1
69.32 69

 

답 확인하기
const solution = function(num_str) {
    let answer = 0;
    let num = parseInt(num_str);
    
    while (num > 0) {
        answer += num % 10;
        num = Math.floor(num / 10);
    }
    
    return answer;
};

 

해설 확인하기

코드를 해석해드리겠습니다.

const solution = function(num_str) {: solution이라는 상수에 함수를 할당합니다. 이 함수는 num_str이라는 매개변수를 받습니다.

let answer = 0;: answer라는 변수를 0으로 초기화합니다. 이 변수는 최종적으로 반환될 숫자의 합을 저장하는 역할을 합니다.

let num = parseInt(num_str);: num_str을 정수로 변환하여 num 변수에 저장합니다.

while (num > 0) {: num이 0보다 큰 동안 반복하는 while 루프입니다. 이 루프는 숫자의 각 자리 숫자를 더하는 과정을 수행합니다.

answer += num % 10;: num을 10으로 나눈 나머지를 answer에 더합니다. 이는 num의 일의 자리 숫자를 answer에 더하는 것을 의미합니다.

num = Math.floor(num / 10);: num을 10으로 나눈 몫을 구하여 다시 num에 할당합니다. 이는 num의 일의 자리 숫자를 제거하는 것을 의미합니다.

return answer;: 최종적으로 계산된 answer 값을 반환합니다.

이 함수는 주어진 문자열로 된 숫자의 각 자리 숫자를 더하여 그 합을 반환하는 기능을 수행합니다. 예를 들어, solution("12345")를 호출하면 1 + 2 + 3 + 4 + 5의 결과인 15를 반환합니다.

 

4. 문자열 정수의 합  : 한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 각 자리수의 합을 return하도록 solution 함수를 완성해주세요.

function solution(num_str) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
num_str result
"123456789" 45
"1000000" 1

 

답 확인하기
function solution(num_str) {
   const a = num_str.split('')
   const b = a.map(Number)

   return b.reduce((c,d)=>c+d)
}

 

해설 확인하기

코드는 주어진 문자열을 숫자로 변환한 후, 각 숫자를 합산하여 결과를 반환하는 함수입니다.

함수 이름은 solution이며, 하나의 매개변수인 num_str을 가집니다. num_str은 숫자들로 이루어진 문자열입니다.

함수의 동작을 살펴보면, 먼저 num_str을 split('') 메서드를 사용하여 각각의 문자로 분리한 후, a 배열에 저장합니다. 예를 들어, "12345"라는 문자열이 입력되면 a 배열은 ['1', '2', '3', '4', '5']가 됩니다.

다음으로, a 배열의 각 요소를 map(Number)를 사용하여 숫자로 변환하여 b 배열에 저장합니다. 숫자로 변환하기 위해 Number 함수를 사용합니다. 위의 예시에서는 b 배열은 [1, 2, 3, 4, 5]가 됩니다.

마지막으로, b 배열의 모든 요소를 reduce 메서드를 사용하여 합산하여 결과를 반환합니다. reduce 메서드는 배열의 각 요소에 대해 주어진 함수를 실행하고, 누적된 결과를 반환합니다. 여기서는 각 숫자를 더하는 함수가 사용되었습니다. 위의 예시에서는 1 + 2 + 3 + 4 + 5의 결과인 15가 반환됩니다.

따라서, solution("12345")를 호출하면 15가 반환됩니다.

 

5. 문자열을 정수로 변환하기 : 숫자로만 이루어진 문자열 n_str이 주어질 때, n_str을 정수로 변환하여 return하도록 solution 함수를 완성해주세요.

function solution(n_str) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
n_str result
"10" 10
"8542" 8542

 

답 확인하기
function solution(num_str) {
   return parseInt(num_str);
}

 

해설 확인하기

코드는 주어진 숫자로만 이루어진 문자열 num_str을 정수로 변환하여 반환하는 함수입니다.

함수 이름은 solution이며, 하나의 매개변수인 num_str을 가집니다. num_str은 숫자들로만 이루어진 문자열입니다.

함수의 동작은 간단합니다. parseInt() 함수를 사용하여 num_str을 정수로 변환한 후, 그 값을 바로 반환합니다.

예를 들어, num_str이 "12345"라는 문자열로 주어진 경우, parseInt("12345")를 호출하여 문자열을 정수로 변환하면 결과로 12345가 반환됩니다.

따라서, solution("12345")를 호출하면 12345라는 정수가 반환됩니다..

728x90
반응형