Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[프로그래머스]의상(Lv.2) - 코틀린 본문

코딩테스트

[프로그래머스]의상(Lv.2) - 코틀린

Wise-99 2023. 5. 29. 20:18
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


❓ 문제 풀이

해시를 연습하는 고득점 kit 문제로 해시를 사용하여 풀 방법을 생각했다.

  • 해시 맵을 사용하여 의상의 종류 갯수를 구한다.
    • 해시 맵의 key는 의상의 종류 이름(String)으로 하고, value를 1(Int)로 한다.
    • 같은 의상 종류가 있다면 value를 증가(++) 시킨다.
  • 서로 다른 옷의 조합 수를 구한다.
    • 입출력 예시를 보면 (의상의 종류 + 1)  한 값에서 1을 빼준 값이 정답이 된다.
    • 의상의 종류에 +1을 하는 이유는 해당 의상을 안입었을 경우도 포함시키기 위해서이다.
    • 최종 값에서 -1을 하는 이유는 아무것도 입지 않는 경우의 수를 제외시키기 위해서이다.

✔️ 내 코드

class Solution {
    fun solution(clothes: Array<Array<String>>): Int {
        val hashMap : HashMap<String, Int> = HashMap()
        
        for(cloth in clothes){

            hashMap[cloth[1]] = hashMap.getOrDefault(cloth[1],1) + 1
        }
        
        return hashMap.values.fold(1, {total, num -> total * num}) - 1
    }
}
  • 의상 종류의 갯수를 저장해놓을 HashMap을 선언한다.
  • for문을 이용하여 주어진 2차원 배열 clothes를 가져와 순회한다.
  • hashMap의 Key와 Value를 정의한다.
    • cloth[1]은 각 의상의 종류들이다.
    • getOrDefault()를 이용하여 Value 값을 정한다.
    • 없는 Key라면 기본 값을 1로 정의한다.
    • 존재하는 Key라면 해당 Key의 Value를 가져온다.
    • Value에 1을 더한다.(해당 의상을 입지 않는 경우의 수 추가)
  • fold()를 이용하여 각 Value 값들을 곱한다.
    • total의 기본 값은 1이며 여기에 hashMap의 Value들을 num으로 받아 total에 곱한다.
  • 최종 값에서 -1 한다.(아무 것도 입지 않는 경우의 수 제거)