프로그래머스 코딩테스트



문제 1. 2차원으로 만들기


정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.

num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.

function solution(num_list, n) {
    var answer = [];
    for (let i = 0; i < num_list.length; i += n) {
        answer.push(num_list.slice(i, i + n));
    }
    return answer;
}

설명: for에서 증가폭은 n만큼으로 행한다. 이후 answer에 .push할 때는 slice를 사용해 배열을 조각내준다. 이때 (i, i+n)이라 하면 보기엔 2개만 들어가는 것 같아도 n개만큼 들어가는 것이니 걱정말도록.


문제 2. k의 개수


1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.

function solution(i, j, k) {
    var answer = 0;
    let Arr = []
    
    for (let a=i; a<=j; a++){
        Arr.push(a.toString().split('').map(Number));
    }
    
    answer = Arr.flat().filter(num => num === k).length;
    
    return answer;
}

설명: 일단 i부터 j까지 모든 수를 배열로 만들어 Arr에 넣어버렸다. 이후 .filter()를 사용하여 k가 일치하는 것을 찾아 그 길이를 세었다.


문제 3. A로 B만들기


문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.

function solution(before, after) {
    var answer = 0;
    let BArr = before.split('');
    let AArr = after.split('');
    let pandan = 0;
    
    BArr.sort();
    AArr.sort();
    
    for(let i=0; i<BArr.length; i++){
        if(BArr[i] !== AArr[i]){
            pandan = 1;
        }
    }
    
    if(pandan === 1){
        answer = 0;
    } else {
        answer = 1;
    }
    
    return answer;
}

설명: 일단… 나는 조금 무식하게 before과 after를 배열로 만든 다음에 sort로 정렬했다. 그런 뒤 두 배열이 같지 않을 때 pandan에 1을 주었다.


문제 4 - 팩토리얼


i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.

function solution(n) {
    var answer = 1;
    let i = 1;
    
    while (answer <= n) {
        i++;
        answer *= i;
    }
    
    return answer = i - 1;
}

설명: 간단하다. answer이 주어진 n보다 작으면 계속해서 돌린다. 팩토리얼을 곱하는 수가 1씩 증가하니 i를 증가시켜 계속 곱해준다. i는 n보다 큰 수를 곱했을 때의 값이므로 -1을 해주어야 된다.


문제 5 - 숨어있는 숫자의 덧셈(2)


문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

function solution(my_string) {
    var answer = 0;
    let numbers = my_string.match(/\d+/g);
    numbers= numbers ? numbers.map(Number) : [];
    for(let i=0; i< numbers.length; i++ ){
        answer += numbers[i]
    }
    return answer;
}

설명: 왠지 문자열에서 숫자만 골라내는 메서드가 있을 것 같아 찾아보니 정규식이 존재했다. .match()과 정규식을 통해 숫자만 골라낼 수 있다. 이를 배열로 만들어 해당하는 숫자를 answer에 더하였다.


Jeong

예술, 코딩, 그리고 삶