반응형
문제 풀이
- 같은 이름을 가진 의상은 존재하지 않습니다.
-> 의상 이름 중복 X, 의상 종류 포커스
- 스파이는 하루에 최소 한 개의 의상은 입습니다.
-> 의상을 모두 입지 않을 경우를 제외하자
예제 1번
clothes | return |
[["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]] | 5 |
예제 1번처럼 입을 수 있는 2가지의 의상 종류(headgear, eyewear)가 있다고 가정해보자. 풀이를 할 때 다음과 같은 경우를 고려해야한다.
- 해당 종류의 옷을 입지 않고 다른 종류의 옷을 입은 경우 - 기본값 1
- 해당 종류의 옷을 입었을 경우 - 값 +1 올리기
- 해당 종류의 다른 옷을 입었을 경우 - 값 + 1 올리기
위 사항을 고려해서 코드로 풀이하면 다음과 같다.
let obj = {};
for(let i = 0; i < clothes.length; i++) {
obj[clothes[i][1]] = (obj[clothes[i][1]] || 1) + 1;
}
- 빈 객체(obj)를 생성한다.
- clothes 배열을 돌면서 의상의 종류를 key로, 의상 종류에 포함되는 옷의 개수를 value로 하는 프로퍼티를 obj에 할당한다.
- 1번처럼 해당 종류의 옷을 입지 않았을 경우, 기본 값을 1로 한다. (obj[clothes[i][1]]가 undefined일 경우 1)
- 2, 3번처럼 해당 종류의 옷(또는 해당 종류의 다른 옷)을 입으면 value를 +1씩 올려준다.
다음으로 의상 종류의 개수만큼 모든 경우의 수(value)를 곱해준다.
for(let key in obj) {
answer *= obj[key];
}
return answer - 1;
위 return answer - 1;에서 -1을 해준 이유는 의상을 모두 입지 않은 경우를 제외한 것이다.
코드
function solution(clothes) {
let answer = 1;
let obj = {};
const len = clothes.length;
for(let i = 0; i < len; i++) {
obj[clothes[i][1]] = (obj[clothes[i][1]] || 1) + 1;
}
for(let key in obj) {
answer *= obj[key];
}
return answer - 1;
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 | JavaScript (0) | 2022.03.10 |
---|---|
[프로그래머스] 멀쩡한 사각형 | JavaScript (0) | 2021.08.15 |
[백준] 단계별로 풀어보기 4단계 | Node.js (0) | 2021.07.09 |
[프로그래머스] 올바른 괄호 | JavaScript (0) | 2021.07.02 |
[프로그래머스] 땅따먹기 | JavaScript (4) | 2021.06.29 |