DevLog:-)

[프로그래머스][Javascript]의상 본문

알고리즘/프로그래머스

[프로그래머스][Javascript]의상

hyeon200 2023. 7. 25. 01:48
반응형

문제

의상

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

종류별 옷 수를 +1 해서 각각 곱하면 되는 문제이다. 

제공된 배열에서 종류별 옷 수를 찾는 코드를 작성하는 것이 핵심이다. 

 

코드

처음에 작성한 코드 (c배열에는 옷종류를 n배열에는 c배열 순서에 맞춰서 종류별 개수를 누적했다. )

function solution(clothes) {
    var answer = 1;
    let c =[];
    let n =[];
    let N;
    for (let i of clothes){
        if(!c.includes(i[1])){
            c.push(i[1]);
            n[c.indexOf(i[1])] = 1;
        }
        else{
            n[c.indexOf(i[1])] += 1;
        }
    }
    //console.log(c);
    //console.log(n);
    for(let i of n){
         answer *= (i+1);       
    }
    return answer-1;
}

 

더 짧은 코드

위에 코드처럼 굳이 배열 두개를 만들 필요가 없었다. [종류 이름: 개수] 형태의 object를 이용했다. 

function solution(clothes) {
    var answer = 1;
    let c =[];
    
    for (let i of clothes){
        if(!c[i[1]]){c[i[1]] =1;}
        else{c[i[1]] +=1;}
    }
 
    for(let i in c){ //object는 of 사용 안됨
        answer *= (c[i]+1);       
    }
    return answer-1;
}

 

📖다른 풀이

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;    
}
function solution(clothes) {
    let answer = 1;
    const obj = {};
    for(let arr of clothes) {
        obj[arr[1]] = (obj[arr[1]] || 0) + 1; //인상적인 코드
    }

    for(let key in obj) {
        answer *= (obj[key]+1);
    }

    return answer - 1;
}

 

✅checkpoint!

for(let i of arr) arr의 요소 순회
for(let i in arr) arr의 인덱스 순회
arr.includes(value) true, false 반환
arr.indexOf(value) 요소(value)의 첫번째 인덱스 값 반환
reduce란? 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환
n_arr = arr.reduce((sum,cv) => sum + cv,0); 배열의 값 합치기
a[i] = a[i] ? a[i]+1 : 1 a[i]가 있으면 그 값에 +1, 없으면 1
a[i] = (a[i] || 0) +1 a[i]가 있으면 그 값에 +1, 없으면 1

 

 

반응형