728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[리팩토링 전 최초 코드] : 통과
function solution(clothes){
let temp = []
let clothesArr=Array.from(new Set(clothes.map((item)=>item[1]))).map((item)=>[item])
let answer=1;
for(i=0;i<clothes.length;i++){
for(j=0;j<clothesArr.length;j++){
if(clothes[i][1]===clothesArr[j][0]){
clothesArr[j].push([clothes[i][0]])
break
}
}
}
for(i=0;i<clothesArr.length;i++){
answer=answer*clothesArr[i].length
}
return answer-1
}
[리팩토링 후 최종 코드] : 통과
function solution(clothes) {
let clothesArr = [];
for (let i = 0; i < clothes.length; i++) {
let type = clothes[i][1]; //headgear, eyewear
let existingType = clothesArr.find(item => item.type === type); // 이미 존재하는지 확인
if (!existingType) {
clothesArr.push({
type: type,
items: [clothes[i][0]]
});
}// 없다면 {type:"headgear",items:["yellow_hat"]} 과 같은 형식으로 추가
else {
existingType.items.push(clothes[i][0]);
// 없다면 {type:"headgear",items:["yellow_hat","blue_sunglasses"]} 과 같은 형식으로 추가
}
}
// 조합의 수는 각 타입들이 보유한 item의 개수들의 곱
let total = 1;
for (let i = 0; i < clothesArr.length; i++) {
total *= clothesArr[i].items.length + 1;
}
// 하나도 입지 않은 경우는 제외
return total - 1;
}
예전에 해시 관련해서 한 번 공부한 적이 있었는데, 원하는 방식으로 정확하게 구현을 하지는 못해서 차선택으로 배열을 통해 구현을 하여 정답을 구하였다. 원하는 형식으로 만든 뒤에 전체 조합의 개수를 구하는 방법은 쉬웠다.
728x90
'알고리즘' 카테고리의 다른 글
JavaScript 정렬 라이브러리 (0) | 2023.04.09 |
---|---|
JavaScript 정렬(Sorting) 알고리즘: 선택 정렬, 버블 정렬, 삽입 정렬, 병합 정렬 (0) | 2023.04.07 |
프로그래머스 > 2019 KAKAO BLIND RECRUITMENT > 오픈채팅방 (0) | 2023.04.04 |
프로그래머스 > Summer/Winder Coding(~2018) > 방문 길이 (0) | 2023.04.03 |
프로그래머스 > 카카오 개발자 겨울 인턴십 > 튜플 (0) | 2023.04.01 |