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

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

by dongjin6539 2023. 5. 18.
728x90
반응형

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

 

코딩테스트 입문 Day3

 

 

1. 나머지 구하기 : 정수 num1num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.

function solution(num1, num2) {
    var answer = -1;
    return answer;
}

길라잡이

  • 변수 answer의 데이터를 수정해서 답을 구해보세요.
  • 예시
num1 num2 result
3 2 1
10 5 0

 

답 확인하기
function solution(num1, num2) {
    var answer = num1 % num2;
    return answer;
}

 

해설 확인하기

이 함수는 두 개의 숫자 num1과 num2를 입력받아 num1을 num2로 나눈 나머지를 반환하는 기능을 수행합니다.

함수의 동작을 자세히 설명하겠습니다.

num1을 num2로 나눈 나머지를 계산하여 answer 변수에 저장합니다. 이는 % 연산자를 사용하여 수행됩니다.

answer 변수를 반환하여 결과를 출력합니다.

결과적으로, 함수는 두 개의 숫자 num1과 num2를 입력받아 num1을 num2로 나눈 나머지를 반환합니다.

 

2. 중앙값 구하기 : 중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

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

길라잡이

  • 변수 answer의 데이터를 수정해서 답을 구해보세요.
  • 예시
array result
[1, 2, 7, 10, 11] 7
[9, -1, 0] 0

 

답 확인하기
function solution(array) {
    let newArray = [];
    for(let arrayCnt=0; arrayCnt<array.length; arrayCnt++){
        let minNumber = 1000;
        // 배열에서 최솟값 찾기
        let cnt = 0;
        for(let cnt=0; cnt<array.length; cnt++){
            if(minNumber > array[cnt]){
                minNumber = array[cnt];
            }        
        }

        // minNumber <- 최솟값
        newArray.push(minNumber);

        // 원래 배열의 찾은 값을 지우기
        for(let cnt2=0; cnt2<array.length; cnt2++){
            if(minNumber === array[cnt2]){
                array[cnt2] = 1000;
                break;
            }
        }
    }
    return newArray[Math.floor(array.length / 2)];
}

 

해설 확인하기

이 함수는 주어진 배열 array에서 최솟값을 찾아 새로운 배열에 추가한 후, 새로운 배열의 중간 값(인덱스 array.length / 2에 해당하는 값)을 반환하는 기능을 수행합니다.

함수의 동작을 자세히 설명하겠습니다.

빈 배열인 newArray 변수를 선언합니다. 이 변수는 최솟값을 저장할 배열입니다.

for 루프를 사용하여 array 배열의 각 요소를 반복적으로 접근합니다.

minNumber 변수를 1000으로 초기화합니다. 이 변수는 현재까지의 최솟값을 저장할 것입니다.

내부 for 루프를 사용하여 array 배열의 각 요소를 반복적으로 접근합니다.

현재 요소가 minNumber보다 작으면, minNumber 값을 현재 요소로 업데이트합니다.

내부 for 루프가 완료되면, 최솟값인 minNumber를 newArray에 추가합니다.

원래 배열 array에서 찾은 최솟값을 제거하기 위해 내부 for 루프를 사용합니다. 최솟값과 동일한 요소를 찾으면 해당 요소를 1000으로 대체하고, 루프를 중지합니다.

모든 반복이 완료되면, newArray[Math.floor(array.length / 2)]를 반환하여 새로운 배열의 중간 값(인덱스 array.length / 2에 해당하는 값)을 출력합니다.

결과적으로, 함수는 주어진 배열 array에서 최솟값을 찾아 새로운 배열에 추가하고, 새로운 배열의 중간 값(인덱스 array.length / 2에 해당하는 값)을 반환합니다.

 

3. 최빈값 구하기 : 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

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

길라잡이

  • 변수 answer의 데이터를 수정해서 답을 구해보세요.
  • 예시
array result
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1

 

답 확인하기
function solution(array) {
    // sort()는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다.
    let soltedArray = array.sort((a,b) => a-b)
    
    // 차례대로 원소를 확인하여 갯수를 확인
    let choi = -1;         // 최빈값
    let choiRepeatCnt = 0; // 최빈값이 될때 몇번 반복해서 된건지
    let repeatCnt = 0;     // 현재 똑같은 숫자가 몇번 등장했는지
    let beforeNumber = 0;  // 이전 숫자
    let isDupChoi = false; // 최빈값 중복 확인
    for (let cnt = 0; cnt < array.length; cnt++){
        // 1. 반복을 세주는 로직
        if(beforeNumber !== array[cnt]){
            repeatCnt = 1;
        } else {
            repeatCnt = repeatCnt + 1;
        }
        // 3. 중복일 때를 확인
        if(repeatCnt === choiRepeatCnt){
            if(choi !== array[cnt]){
                isDupChoi = true;
            }
        }
        // 2. 최빈값의 반복 횟수와 현재 반복 횟수 확인
        if(repeatCnt > choiRepeatCnt){
            choi = array[cnt];
            choiRepeatCnt = repeatCnt;
            isDupChoi = false;
        }
        beforeNumber = array[cnt];
    }
    if(isDupChoi) return -1;
    return choi;
}

 

해설 확인하기

이 함수는 주어진 배열 array에서 가장 많이 반복되는 값(최빈값)을 찾아 반환하는 기능을 수행합니다.

함수의 동작을 자세히 설명하겠습니다.

soltedArray 변수에 주어진 배열 array를 오름차순으로 정렬한 결과를 할당합니다. 이 때, sort() 메서드를 사용하고 비교 함수 (a, b) => a - b를 사용하여 오름차순 정렬을 수행합니다.

변수 choi를 -1로 초기화합니다. 이 변수는 최빈값을 저장할 것입니다.

변수 choiRepeatCnt를 0으로 초기화합니다. 이 변수는 최빈값이 반복된 횟수를 저장할 것입니다.

변수 repeatCnt를 0으로 초기화합니다. 이 변수는 현재 숫자의 반복 횟수를 저장할 것입니다.

변수 beforeNumber를 0으로 초기화합니다. 이 변수는 이전 숫자를 저장할 것입니다.

변수 isDupChoi를 false로 초기화합니다. 이 변수는 최빈값이 중복되는지 여부를 확인할 것입니다.

for 루프를 사용하여 array 배열의 각 요소를 반복적으로 접근합니다.

현재 숫자가 이전 숫자와 다를 경우, repeatCnt를 1로 초기화합니다. 같을 경우, repeatCnt를 1 증가시킵니다.

현재 반복 횟수 repeatCnt와 최빈값의 반복 횟수 choiRepeatCnt를 비교하여 최빈값을 업데이트합니다. 만약 repeatCnt가 choiRepeatCnt보다 크다면, 최빈값과 최빈값의 반복 횟수를 갱신합니다. 동시에 isDupChoi 변수를 false로 설정합니다.

beforeNumber를 현재 숫자로 업데이트합니다.

최빈값 중복 여부인 isDupChoi가 true인 경우, -1을 반환하여 중복된 최빈값이 있는 경우를 처리합니다.

최빈값인 choi를 반환하여 결과를 출력합니다.

결과적으로, 함수는 주어진 배열 array에서 가장 많이 반복되는 값(최빈값)을 찾아 반환합니다. 중복된 최빈값이 있는 경우 -1을 반환합니다.

 

4. 짝수는 싫어 : 정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

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

길라잡이

  • 변수 answer의 데이터를 수정해서 답을 구해보세요.
  • 예시
numbers result
[1, 2, 3, 4, 5] [2, 4, 6, 8, 10]
[1, 2, 100, -99, 1, 2, 3] [2, 4, 200, -198, 2, 4, 6]

 

답 확인하기
function solution(n) {
    var answer = [];
    let cnt = 1;
    for(let i=1; i<=n; i++){
        if(i % 2 == 1){
            answer.push(i);
        }
    }
    return answer;
}

 

해설 확인하기

이 함수는 1부터 주어진 수 n까지의 홀수를 배열로 반환하는 기능을 수행합니다.

함수의 동작을 자세히 설명하겠습니다.

answer 변수를 빈 배열로 초기화합니다. 이 배열은 홀수를 저장할 것입니다.

cnt 변수를 1로 초기화합니다. 이 변수는 현재 숫자를 나타냅니다.

for 루프를 사용하여 i가 1부터 n까지 반복되도록 설정합니다.

현재 숫자 i가 홀수인 경우, answer 배열에 i를 추가합니다.

반복이 완료되면, answer 배열을 반환하여 결과를 출력합니다.

결과적으로, 함수는 1부터 주어진 수 n까지의 홀수를 배열로 반환합니다.

728x90
반응형