[프로그래머스] 코딩테스트연습 > 해시 > 위장
알고리즘/javascript

[프로그래머스] 코딩테스트연습 > 해시 > 위장

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

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; 
}
  • 풀다가 간단하게 어떻게 푸는지 모르겠어서 인터넷 찾아보고 답을 찾아서 풀었다...
  1. clothes 에서 각각의 key 값 검색 ( t[1] )
  2. 빈 object( 초기값: {} ) 에 기존 key 값( 해당하는 옷 종류 )이 존재하면 개수를 +1 해주고 없으면 1개를 시작으로 새로 만들어줌
  3. Object.values로 value값만 Array 로 return → value: 해당 옷 종류의 서로 다른 옷 개수 ex. [ A종류개수, B종류개수, C종류개수...]
  4. 초기값을 1로 시작해서 옷 입는 경우의 수 계산. ※ 하나의 옷만 입을 수 있으므로 옷종류개수+1 을 곱해줘야 함. → 1*(A종류개수+1)*(B종류개수+1)*(C종류개수+1)*....
  5. 옷을 아예 입지 않는 경우는 없으므로 전체 경우의 수에서 -1

  • Object.values : Obj에서 value값들로만 이루어진 array를 return
  • Array.reduce( (누적값, 현재값, 현재값index, array) => { return } , 초기값 )
    • 누적값, 현재값은 Required
    • 현재값index, array는 optional
    • 초기값은 안 쓰면 array의 첫번째 값이 default
반응형