[프로그래머스/JavaScript]해시--위장

장현광·2021년 7월 12일
0

알고리즘

목록 보기
5/8
post-thumbnail

#1 첫 Level2

프로그래머스의 Level2 알고리즘을 처음 풀어봤는데 장난이 아니다.
수학을 왜 잘 해야하는지 싶기도 하고. 코드를 짜는 건 재쳐놓고 간단한 규칙도 수식으로 정리를 못하니 자괴감이 들기도 하다.

#2 경우의 수

가능한 위장의 경우의 수를 찾는 방법은 다음과 같다.

([1번째 의상 종류의 의상 갯수] + 1) *
([2번째 의상 종류의 의상 갯수] + 1) *
([3번째 의상 종류의 의상 갯수] + 1) *
...
([n번째 의상 종류의 의상 갯수] + 1) - 1

가령 예제 #1에서

  • 모자 2개
  • 안경 1개

라면 가능한 경우의 수는 3 * 2 - 1 = 5,

예제 #2에서

  • 얼굴 3개

라면 가능한 경우의 수는 4 - 1 = 3이 나온다.

#3 무작위로 제공된 의상들을 어떻게 정리할 것인가

첫 번째 의상을 기준으로 모든 의상들을 비교한다.
분류 결과를 저장하기 위해 var box = {}를 정의하고 clothes 배열의 모든 원소들이 clothes[1]과 의상 타입이 같은지를 비교한다.
box 안에 의상 타입이 없다면 1로 초기화, 의상 타입이 존재한다면 += 1로 갯수를 더하여 준다.

#4 알고리즘

function solution(clothes) {
    var answer = 1;
    var box = {}
    
    clothes.map((el) => {
        if(el[1] === clothes[0][1]) {
            if(box[el[1]]) {
                box[el[1]] += 1
                console.log(box)
            } else {
                box[el[1]] = 1
            }
        } else {
            if(box[el[1]]) {
                box[el[1]] += 1
            } else {
                box[el[1]] = 1
            }
        }
    })
    
    for(let key in box) {
        answer *= (box[key] + 1)
    }
    return answer - 1;
}

결과는 잘 나왔지만, 어떻게 간결하게 나타낼 것인가를 고민해볼 차례인듯하다.

#5 어떻게 간결하게 표현할 것인가

profile
프론트!

0개의 댓글