[TIL] 240404 (new Set(), arr.splice(), arr.reduce())

·2024년 4월 4일

TIL

목록 보기
10/268

새롭게 알게된 것

new Set()

  • new Set() : value 값만을 저장하며 중복을 허용하지 않는 객체를 만드는 메서드. 동일한 값은 1개만 가질 수 있다. 중복값을 제거할 수 있다.

프로그래머스 중복된 문자 제거 문제를 풀며 알게된 메서드. 문제는 다음과 같다.

  • 문제 : 문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
function solution(my_string) {
    return [...new Set([...my_string])].join('');
}

내가 푼 답이다. 이 때 my_string은 그 자체로도 이터러블이기 때문에 굳이 배열로 만들어서 바꿔줄 필요가 없다. 그러므로 그냥 my_string으로 넣어도 된다.

arr.splice()

  • arr.splice() : 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다.

메서드는 알고 있었으나 어떤 경우에 쓰일지 몰라 잊고 있었는데, 문제 풀이를 하다가 알게 되었다.

  • 문제 : 정수 배열 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) {
    let answer = [];
    let arr = [];
    for (let i=0; i<num_list.length; i++){
        arr.push(num_list[i]);
        if (arr.length == n) {
            answer.push(arr);
            arr = [];
        }
    }
    return answer;
}

풀긴 했으나 코드가 길다.
이 때 arr.splice() 메서드를 사용하면 좀 더 간단하게 해결할 수 있다.

function solution(num_list, n) {
    let answer = [];
    while(num_list.length){
        answer.push(num_list.splice(0,n));
    }
    return answer;
}

arr.reduce()

  • arr.reduce : 배열의 각 요소를 순회하며 callback 함수의 실행 값을 누적하여 하나의 결과값을 반환한다.

정확한 사용 방법은 기술 부채로 남겨두고, 문제를 풀 때 사용한 방법에 관해서는 이해가 되었기에 작성한다.

  • 문제 : 머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

우선 내가 푼 코드는 다음과 같다.

function solution(letter) {
    let answer = ''
    let morse = {
        '.-': 'a', '-...': 'b', '-.-.': 'c', '-..': 'd', '.': 'e', '..-.': 'f',
        '--.': 'g', '....': 'h', '..': 'i', '.---': 'j', '-.-': 'k', '.-..': 'l',
        '--': 'm', '-.': 'n', '---': 'o', '.--.': 'p', '--.-': 'q', '.-.': 'r',
        '...': 's', '-': 't', '..-': 'u', '...-': 'v', '.--': 'w', '-..-': 'x',
        '-.--': 'y', '--..': 'z'
    }
    let arr = letter.split(' ');
    for (let i=0; i<arr.length; i++){
        answer += morse[arr[i]];
    }
    return answer;
}

이 방법을 사용한 사람들도 꽤 보였지만, 더 간단한 방법이 바로 reduce() 메서드를 사용한 방법이었다.

function solution(letter) {
    let answer = ''
    let morse = {
        '.-': 'a', '-...': 'b', '-.-.': 'c', '-..': 'd', '.': 'e', '..-.': 'f',
        '--.': 'g', '....': 'h', '..': 'i', '.---': 'j', '-.-': 'k', '.-..': 'l',
        '--': 'm', '-.': 'n', '---': 'o', '.--.': 'p', '--.-': 'q', '.-.': 'r',
        '...': 's', '-': 't', '..-': 'u', '...-': 'v', '.--': 'w', '-..-': 'x',
        '-.--': 'y', '--..': 'z'
    }
    return letter.split(' ').reduce((prev, curr)=>prev + morse[curr],'')
}

morse 내 curr에 해당하는 알파벳을 계속 반복해 prev에 넣어주면서 반복문을 사용하지 않아도 반복을 시켜 문제를 해결할 수 있었다.

profile
웹 프론트엔드 개발자

0개의 댓글