#1 첫 Level2
프로그래머스의 Level2 알고리즘을 처음 풀어봤는데 장난이 아니다.
수학을 왜 잘 해야하는지 싶기도 하고. 코드를 짜는 건 재쳐놓고 간단한 규칙도 수식으로 정리를 못하니 자괴감이 들기도 하다.
#2 경우의 수
가능한 위장의 경우의 수를 찾는 방법은 다음과 같다.
([1번째 의상 종류의 의상 갯수] + 1) *
([2번째 의상 종류의 의상 갯수] + 1) *
([3번째 의상 종류의 의상 갯수] + 1) *
...
([n번째 의상 종류의 의상 갯수] + 1) - 1
가령 예제 #1
에서
라면 가능한 경우의 수는 3 * 2 - 1 = 5
,
예제 #2
에서
라면 가능한 경우의 수는 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 어떻게 간결하게 표현할 것인가