코딩테스트 준비(kotlin)/자료구조
[프로그래머스] 의상 (kotlin)
1chanhue1
2024. 12. 29. 10:45



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: 컬렉션의 현재 요소.