💡 유형 : 해시

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

구현

하루에 최소 한 개의 의상을 입을 때, 서로 다른 옷의 조합 수

clothes: [의상의 이름, 의상의 종류] 2차원 배열

각 종류 당 하나의 옷 고를 수 있음

 

1. 1개의 의상을 입는 경우: 행의 개수(clothes.length)

2. 2개 이상의 의상을 입는 경우: 의상의 종류를 보고 고름 => 같은 종류끼리 모아야한다. 따라서 객체를 만들어 종류를 키로 사용. 이때 개수만 사용하면 된다.

 

풀이

function solution(clothes) {
    //옷 종류별로 옷을 그룹화
    const clothesObj = clothes.reduce((acc,[name, type])=>{
        acc[type] = (acc[type] || 0) + 1; //각 종류의 옷 개수를 카운트
        return acc;
    },{});
    
    //각 종류 별 옷 개수 + 1(입는 경우 +  안 입는 경우)을 곱한 뒤, 아무것도 입지 않는 경우 제외
    return Object.values(clothesObj).reduce((acc, count)=> acc * (count + 1),1) -1 ;

 

 

 

2차원 배열을 객체로 변환하는 방법은 아래의 블로그를 참고했다. 

https://velog.io/@rhkrgudwh/2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0-key-value-%EA%B0%9D%EC%B2%B4%EB%A1%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

2차원 배열 데이터 key-value 객체로 만들기

programmers의 위장 문제를 풀면서 2차원 배열 데이터를 key-value 쌍을 갖는 객체로 만들고 싶었다. 추후에도 이런 풀이를 사용할 일이 있을거라 생각하여 블로그에 남겨 놓기로 했다.아래의 test case

velog.io

 

reduce를 처음으로 제대로 사용해보았다. 초깃값을 설정해서 계산해야할 때 유용한 것 같다. reduce를 사용해서 코드를 작성하는 연습을 많이 해봐야겠다.

 

💡 유형: 해시

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42577

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

구현

어떤 번호가 다른 번호의 접두어인 경우가 있으면 false, 아니면 true

접두어 => 포함하고 있고, 인덱스가 0이여야함

 

1. phone_book을 순회하면서, 한 번호가 다른 번호들에 포함되는지 확인한다.

2. 포함된다면, 인덱스가 0인지 확인한다. 

=> 이렇게 생각했는데 MDN 문서를 보니 startsWith() 라는 메서드가 있었다!

 

풀이

function solution(phone_book) {
    //길이가 짧은 것부터 정렬
    phone_book.sort();
    
    for(let i=0;i<phone_book.length-1;i++){
        if(phone_book[i+1].startsWith(phone_book[i])){
            return false;
        }
    }
    return true;
}

 

처음에 i를 phone_book.length 까지 순회하게 하여 undefined 오류가 났다.. 맨 마지막은 i+1의 값이 존재하지 않기 때문이다.

 

 

 

sort 함수는 원 배열이 정렬된다! (복사본이 생성되는 것 아님)

 

계속 해시 유형 문제를 풀고 있기 때문에 개념을 정리해보았다.

🥳 해시 테이블(Hash Table)이란?
키와 값을 받아 키를 해싱(Hashing)하여 나온 index값을 저장하는 선형 자료구조
삽입은 O(1)이며 키를 알고 있다면 삭제, 탐색도 O(1)로 수행한다.

 

해시 테이블에 대한 개념을 잘 몰랐었는데, 나도 모르게 배열과 객체를 통해 해시 테이블을 사용하고 있었다. 

자바스크립트에서는 배열(또는 객체)를 생성하고 바로 key를 지정해 값에 접근할 수 있기 때문이다.

 

배열로 구현하는 방법 외에 객체, Map, Set을 사용하는 방법이 있다.

아래의 블로그에 해당 방법이 잘 정리되어있다.

 

https://velog.io/@93minki/JavaScript-%ED%95%B4%EC%8B%9C-%ED%85%8C%EC%9D%B4%EB%B8%94Hash-Table

 

JavaScript 해시 테이블(Hash Table)

 해시 함수를 사용해서 key를 고유 index로 변환해서 해시 테이블에 값을 저장한다. index를 만들기 위해서 해시 함수를 사용한다. 해시 테이블에는 문제점이 있는데, 해시 함수를 사용해서 생성된

velog.io

 

 

💡 유형: 해시

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/1845

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

핵심 정리

N 마리의 폰켓몬 중 N/2 마리 가져갈 수 있음

가장 많은 종류의 폰켓몬을 포함해서 N/2마리 선택하는 방법의 종류 개수

 

풀이

function solution(nums) {
    const pick = nums.length /2;
    const newNums = [...new Set(nums)]; //중복이 제거된 숫자 리스트

    if (pick>=newNums.length){
        return newNums.length;
    } else { //pick < newNums.length
        return pick;
    }
}

 

해시 문제인데 그냥 배열로 풀어버렸다.

다음 문제는 해시로 풀어야지..

+ Recent posts