문제 풀이
같은 이름을 가진 의상은 존재하지 않습니다.
→ 의상 이름 중복 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;
}
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해 보세요!