본문 바로가기

코딩테스트

[프로그래머스] level2. 위장 (javascript)

반응형

문제

스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.

예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.

종류 이름
얼굴 동그란 안경, 검정 선글라스
상의 파란색 티셔츠
하의 청바지
겉옷 긴 코트
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.

나의 풀이

function solution(clothes) {
    var answer = 1;
    let clothobj = {}
    clothes.map((el,index)=> {
        if (clothobj[el[1]]){
            clothobj[el[1]] += 1
        } else{
            clothobj[el[1]] = 1
        }
    })

    const clotharr = Object.keys(clothobj)

    for(let i = 0 ; i < clotharr.length; i++){
        let cnt = clothobj[clotharr[i]]
        if ( clotharr.length>1){
            cnt = cnt +1;
        }

        answer = answer*cnt 
    }

    if ( clotharr.length>1){
            answer = answer-1;
    }

    return answer;
}

 

다른이들의 풀이

function solution(clothes) {
    return Object.values(clothes.reduce((obj, t)=> {
        obj[t[1]] = obj[t[1]] ? obj[t[1]] + 1 : 1;
        return obj;
    } , {})).reduce((a,b)=> a*(b+1), 1)-1;    
}

 

나는 객체를 선언하고, 그곳에 해당 내용이 있으면 추가, 없으면 1로 하는 식으로 했는데
지금 상황에서는 value값만 필요해서 굳이 객체를 다룰 필요 없이 위의 Object.value을 통해 배열로 뽑아 낼 수 있었다.
이러면 나중에 Object.key나 Objec.value로 리스트를 또 만들필요가 없었다.
나중에 꼭 써먹자

반응형