안드로이드 개발자의 창고
[프로그래머스]의상(Lv.2) - 코틀린 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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 한다.(아무 것도 입지 않는 경우의 수 제거)
'코딩테스트' 카테고리의 다른 글
[백준] 11659번 : 구간 합 구하기4 - 코틀린 (0) | 2023.06.09 |
---|---|
[프로그래머스] 기능개발(Lv.2) - 코틀린 (0) | 2023.05.29 |
[프로그래머스] k의 개수(Lv.0) - 코틀린 (0) | 2023.05.14 |
[프로그래머스] 치킨 쿠폰(Lv.0) - 코틀린 (0) | 2023.05.14 |
[프로그래머스] 최댓값과 최솟값(Lv.2) - 코틀린 (2) | 2023.05.14 |