Jun 개발노트

프로그래머스 - 위장

January 13, 2020

위장

  1. 이해

    • 최대 경우의 수를 구하라
    • 해시(키-벨류) 구조
  2. 계획

    • 해시구조이므로 반복하면서 동일한 키 값을 가진은 벨류를 한 배열에 넣어준다.
    • 배열의 원소의 총 갯수를 구하여 경우의 수를 만들어 준다
    • 경우의 수

      • 단독으로 쓰일 경우의 수 : n
      • 조합할 경우 : n*m
  3. 실행

    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;
        
    }
  4. 반성

    • 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 도출
    • 모든 경우의 수를 구하려는 것은 결국 힌트를 보고 알아냄… 역시 오늘도 배웟다

Written by Junho You 배운것을 기록하자