코딩테스트

[코테] 프로그래머스 해시 알고리즘 - 의상 (문제풀이)

인어공쭈 2024. 4. 28. 12:29
문제설명)

코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.코니는 하루에 최소 한 개의 의상은 입습니다.

 

문제풀이)

저번에 풀었던 문제와 비슷하게 느껴져서 map.set 을 사용하면 좋을거 같다고 생각이 들었다.
데이터를 처음에 맵에 넣어두고 이렇게 저렇게 다양한 시도를 해본 끝에 탄생

먼저 데이터를 담을 맵을 생성
옷갯수대로 포문을 돌리고 카테고리 중복 체크를 하기위해 +1 를 더한다
그럼 맵안에 {옷 : 2, 모자 :1} 이런식으로 세팅이 된다
따라서 맵을 다시 포문을 돌려서 한개씩 다른 아이템을 선택하니깐 + 1 을 하여 곱해준다
이때 곱하기를 쓰기 때문에 answer 디폴트값이 1 인것이다
마지막엔 아무것도 안입는 경우의 수는 없으니 -1 를 해준다 (이거 떄문에 잘 안맞아서 지피티한테 도움 청함;;)
function solution(clothes) {
    let answer = 1; 
    const map = new Map();

    for (let i = 0; i < clothes.length; i++) {
        let category = clothes[i][1];
        map.set(category, (map.get(category) || 0) + 1);
    }

    for (let [key, itemCount] of map) {
        answer *= (itemCount + 1);
    }

    answer -= 1;

    return answer;
}
반응형