위장
https://programmers.co.kr/learn/courses/30/lessons/42578
코딩테스트 연습 - 위장
programmers.co.kr
## 문제 설명
[Value,Key] 형태의 배열이 주어진다. 조건에 맞추어 모든 경우의 수 를 구한다.
### 문제 풀이
문제의 답은 위장할 수 있는 모든 경우의 수를 열거하는 것이 아닌 모든 경우의 수만을 출력한다.
따라서 Key,Value는 <종류, 가짓수> 를 지정하며 Hash<String, Int> 타입으로 생성한다.
모든 경우의 수는 모든 가짓수를 곱하는 것 이다.
단, "해당문제의 조건 중 반드시 하나의 옷은 입어야 한다" 와 "어떤 종류의 옷은 입을 수 있지 않아도 된다." 2가지를 고려 해 주어야 한다.
1. 옷을 입지 않을 수 있으니 가짓수 + 1(입지 않는 경우의 수) 를 해 주어야 하며
2. 모두 입지 않는 경우의 수는 제외하기 위해 모든 경우의 수 - 1(아무것도 입지 않는 경우)
가 필요하다.
문제 풀이는 2가지 단계로 나누어진다.
1. 주어진 값을 문제 풀이를 위한 HashMap으로 가공한다.
2. 가공된 값을 토대로 경우의 수를 구한다.
1. 주어진 값
class Solution {
fun solution(clothes: Array<Array<String>>): Int {
var answer = 1
val hash = hashMapOf<String,Int>()
clothes.forEach {
if(hash.containsKey(it[1])){
hash.set( it[1] , hash.get(it[1])!! + 1 )
} else{
hash.set(it[1], 1)
}
}
hash.values.forEach {
answer *= it + 1
}
return answer - 1
}
}
### 회고
문제의 카테고리가 Hash인 것을 보고 해당 자료구조를 사용하여 풀었으나, 다른 사람들의 문제풀이를 보니 GroupBy를 사용하는 사람들이 많았다. 문제를 조금 더 단순화 하는 연습이 필요할 듯 한다.
'알고리즘' 카테고리의 다른 글
백준 1012 유기농 배추 (0) | 2022.11.09 |
---|---|
N으로 표현 kotlin (0) | 2021.07.31 |
1874번 스택 수열 (0) | 2020.02.22 |
구명보트 (0) | 2019.11.19 |
종이접기 (0) | 2019.11.19 |