TIL #53

loci·2024년 6월 22일
0

TIL

목록 보기
51/111


의상

의상의 2차원이 주어지고 첫번째 요소에는 의상이름 두번째 요소에는 의상종류가 주어진다. 각 종류별로 최대 1가지 의상을 착용할 수 있을때 몇가지 조합이 나올 수 있는지 반환해야한다.

고민하다가 못풀어서 다른 코드를 참고했다. 옷을 입었을때 뿐만 아니라 옷을 안입은 경우까지 생각해서 계산해 주었어야 하는데 이부분을 생각하지 못했다.


나의 코드

class Solution {
    fun solution(clothes: Array<Array<String>>): Int {
        var answer = 1
        var map = mutableMapOf<String, Int>()
        for(i in clothes){
            map[i[1]] = map.getOrDefault(i[1], 0) + 1
        }

        for(i in map.values){
            answer *= i+1
        }
        
        return answer -1 
    }
}

map을 만들고 clothes의 각 요소를 가져와서 getOrDefault로 현재요소의 키가 이미 들어가있으면 +1카운트해주고 해당키가 없으면 키를 만들고 값을 0으로 초기화 해준 후 +1 하는 방식으로 map의 값을 설정한다.
그리고 map을 순회하며 값들을 가져와서 +1 해준 후 answer에 곱해준다. 최종적으로 나온 answer에서 모든종류의 옷을 안입은 경우를 빼야하기 때문에 -1한 값을 반환한다.


다른사람 코드

class Solution {
    fun solution(clothes: Array<Array<String>>): Int {
        return clothes.groupBy { it[1] }.values.fold(1) { acc, v -> acc * (v.size + 1) }  - 1
    }
}
profile
편리한 개발자

0개의 댓글