https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
직접 풀진 못하였고 서치를 통해 다른 분의 답안을 참고하였다!
위장
문제 요약
옷의 종류의 이름이 담긴 2차원 배열에서 서로 다른 옷의 조합의 수를 리턴하라.
입출력 예
clothes | return |
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] | 5 |
[["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]] | 3 |
첫 번째 예의 경우, headgear가 yellow, green_turban 2개, eyewear가 1개이다.
그렇다면 2*1 =3인가? 아니다! 옷을 안 입는 경우도 있기 때문. (하지만 아예 안 입는 것은 안된다. 하나는 꼭 입어야 한다.)
그래서
"headgear" = ["yellow", "green_turban", "안 입는 경우"]
"eyewear" =[ "bluesunglasses", "안 입는 경우"]
해서 3*2이지만! 아무것도 안 입는 경우 1을 빼서 5를 리턴하면 된다.
그럼 앞선 문제처럼headgear에게는 3의 value를 , eyewear에게는 2의 value를 준다음 1을 빼주면 된다!
전체 코드
function solution(clothes) {
let answer = 1;
let obj = {};
for(let i=0; i<clothes.length; ++i){
let a = clothes[i];
obj[a[1]]=(obj[a[1]]||1)+1;
}
for(let key in obj){
answer *= obj[key];
}
return answer-1;
}
이제 예제와 함께 코드를 한 줄 한 줄 살펴보자.
먼저 새로 설정한 key와 value 값을 넣기 위해 빈 객체인 obj를 설정한다.
-obj [a [1]]이면, 즉 obj [a [1]]값이 기존에 있으면 그것의 value 값을 아니면 1을 가져와서 +1을 해주다는 것이다.
clothes는 2차 배열로 되어 있기 때문에 0번째 인덱스의 몇 번째 인덱스. 이런 식으로 접근을 해야 한다.
그래서 a에 clothes의 각 인덱스를 변수로 설정한다.
a는 ["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]이다.
1. obj [a [1]] 즉, a [1],["yellowhat", "headgear"] 중 1번째 인덱스 "headgear"뜻한다.
이 값은 첫 번째 값이기 때문에 기존의 값이 없다. 따라서 obj [a [1]]은 false. 따라서 1+1=2. value는 2이다.
{"headgear" => 2}
2. obj [a [2]] 즉, ["bluesunglasses", "eyewear"] 중 1번째 인덱스 "eyewear"를 뜻힌다.
이 값 역시 기존의 "eyewear"값이 없기 때문에 obj [a [2]] 는 false. 따라서 1+1=2. value는 2이다.
{ "eyewear"=> 2}
3. obj [a [3]] 즉, ["green_turban", "headgear"] 중 1번째 인덱스 "headgear"를 뜻한다.
이 값은 1번에서 했듯이 기존의 "headgear"값이 존재한다. 그 값은 2 따라서 2+1=3. value는 3이다.
{"headgear" => 3}
현재 obj는
{"eyewear"=> 2,
"headgear" => 3 }
이다.
이제 for 문을 정리해보자.
- 첫번째 obj[key] 키 값은 2이다. 그리고 처음에 answer을 지정한 것 역시 여기서 사용하기 위해서이다.
answer = answer(=1)*2. 그래서 answer 값은 2가 되었다.
2.두 번째 obj [key] 키 값은 3이다. 그리고 앞선 단계에 의해 answer 값은 2가 되었다.
answer = 2 * 3. 이제 answer 값이 6이 되었다.
마지막에 아예 안 입는 경우 1은 빼주기 때문에 결국 6-1는 5.
참고 블로그
[프로그래머스/JavaScript] 위장
문제 설명 >### 제한사항 >### 입출력 예 >### 입출력 예 설명 코드 해설 빈 객체(obj)생성 obj에 해당 키가 없으면 값을 1(옷을 입지 않은 경우)로 지정하고 1(옷의 개수)을 더해줌. obj에 해당 키가 있으
velog.io
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JavaScript] 프로그래머스 Level1 #최소직사각형 (0) | 2022.08.18 |
---|---|
[JavaScript] 프로그래머스 Level 1 #같은 숫자는 싫어 (0) | 2022.08.17 |
[JavaScript] 프로그래머스 Level 1 크레인 인형뽑기 게임 (0) | 2022.08.11 |
[JavaScript] 프로그래머스 #키패드 누르기 (0) | 2022.07.26 |
[JavaScript] 프로그래머스 해시 #완주하지 못한 선수 (0) | 2022.07.13 |