https://programmers.co.kr/learn/courses/30/lessons/42578
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
위장 문제는 백준에서도 똑같은 문제가 있고, 프로그래머스에서도 이미 자바로 여러번 풀어봤기 때문에, 코틀린으로 그냥 똑같이 구현한게 전부다.
clothes.forEach {
var type = it[1]
map.put(type, map.getOrDefault(type, 0) + 1);
}
var answer = 1;
var it : Iterator<Int> = map.values.iterator()
while(it.hasNext()) {
answer *= it.next() + 1;
}
map
의 자료구조를 통해서 문제를 해결했다.
type
을 나눈다고 생각을 하는거다 모자, 상의, 하의 등등으로 type
으로 나누고 갯수만 생각한다,
그리고 조합을 위해서 하나를 더 추가한다.
해당 type
을 입지 않았을 때, 의 조건을 위해 하나를 더 추가하고
마지막에 answer
를 1빼주는 이유는 정말 어떤 type
도 추가하지 않았을 때를 생각해서 1을 뺀다.
class Solution { fun solution(clothes: Array<Array<String>>): Int { var map = HashMap<String, Int>(); clothes.forEach { var type = it[1] map.put(type, map.getOrDefault(type, 0) + 1); } var answer = 1; var it : Iterator<Int> = map.values.iterator() while(it.hasNext()) { answer *= it.next() + 1; } // none, none 조합 제거 return answer - 1; } // End of solution }