본문 바로가기
코딩테스트 준비(kotlin)/자료구조

[프로그래머스] 의상 (kotlin)

by 1chanhue1 2024. 12. 29.

 

class Solution {
    fun solution(clothes: Array<Array<String>>): Int {
        var answer = 0


        val hashMap : HashMap<String, Int> = HashMap()

        for(i in 0 until clothes.size){
            hashMap[clothes[i][1]]=hashMap.getOrDefault(clothes[i][1],1)+1
        }

        answer=hashMap.values.fold(1,{acc,number->acc*number})-1



        return answer
    }
}

1. 해시 맵을 사용하여 의상의 종류 갯수를 구해준다. 

  • 해시 맵의 key는 의상의 종류 이름(String)으로 하고, value를 1(Int)로 한다.
  • 같은 의상 종류가 있다면 value 1 증가

2. 서로 다른 옷의 조합 수를 구한다.

  • 입출력 예시를 보면 (의상의 종류 + 1)  한 값에서 1을 빼준 값이 정답
  • 의상의 종류에 +1을 하는 이유는 해당 의상을 안입었을 경우도 포함
  • 최종 값에서 -1 하는 이유는 아무것도 입지 않는 경우의 수를 제외

 

++ fold 함수 활용하기 

fold()를 이용하여 각 Value 값들을 곱한다.

  • acc 의 기본 값은 1이며 여기에 hashMap value들을 number 받아 acc 곱한다.

fold 함수 기본 구조

inline fun <T, R> Iterable<T>.fold(
    initial: R,
    operation: (acc: R, T) -> R
): R
 
 
  • initial: 누적 연산의 시작값.
  • operation: (acc: R, T) -> R 형태의 람다.
    • acc: 이전까지의 누적값 (초기값은 initial).
    • T: 컬렉션의 현재 요소.