프로그래머스 - 위장
2020-01-13
위장
- 이해
- 최대 경우의 수를 구하라
- 해시(키-벨류) 구조
- 계획
- 해시구조이므로 반복하면서 동일한 키 값을 가진은 벨류를 한 배열에 넣어준다.
- 배열의 원소의 총 갯수를 구하여 경우의 수를 만들어 준다
- 경우의 수
- 단독으로 쓰일 경우의 수 : n
- 조합할 경우 : n*m
- 실행
describe('위장', () => { test('최종', () => { expect(solution([['yellow_hat', 'headgear'], ['blue_sunglasses', 'eyewear'], ['green_turban', 'headgear']])).toEqual(5); }); test('카테고리 별 분류', () => { // expect(getClotheArr([['yellow_hat', 'headgear'], ['blue_sunglasses', 'eyewear'], ['green_turban', 'headgear']])).toEqual(5); expect(getClotheArr([['crow_mask', 'face'], ['blue_sunglasses', 'face'], ['smoky_makeup', 'face']])).toEqual(3); }); }); const getClotheArr = (clothe) => { const map = new Map; let max = 1; for(let o of clothe){ map.set(o[1], (map.get(o[1]) || 1) + 1); } for(let o of map.values()){ max *= o } return max-1 } const solution = (clothes) => { var answer = 1; var obj={}; for(var i=0;i<clothes.length;i++){ obj[clothes[i][1]]=(obj[clothes[i][1]] || 1) + 1; } for(var key in obj){ answer *= obj[key]; } return answer-1; }
- 반성
- Map을 이용하여 풀려고 노력하였지만, map.set(o[1], (map.get(o[1]) || 1) + 1)
원래있는 키값의 벨류가 없다면 1을 넣어준다는 것에 구하는데 시간이 오래걸렸다- 값1 && 갑2 - 값1이 참이면 값 2가 나온다(값 1인 true이면 바로 계산안하고 값 도출 / false면 false) - 값1이 거짓이면 무조건 거짓
- 값1 || 값2 - 값1이 참이면 값1이 참이다(더이상 계산안함 둘중하나 참인것 까지) - 값1이 거짓이면 값2 도출
- 모든 경우의 수를 구하려는 것은 결국 힌트를 보고 알아냄... 역시 오늘도 배웟다
- Map을 이용하여 풀려고 노력하였지만, map.set(o[1], (map.get(o[1]) || 1) + 1)