[Kotlin] 프로그래머스 해시 > 위장 with 코틀린

: ) YOUNG·2022년 5월 11일
2

Kotlin 알고리즘

목록 보기
9/28
post-thumbnail

문제

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

}

0개의 댓글