안녕하세요. 이번에는 프로그래머스 의상 문제를 풀어보려고 합니다.
Problem
https://school.programmers.co.kr/learn/courses/30/lessons/42578
Solution
class Solution {
fun solution(clothes: Array<Array<String>>): Int {
var answer = 1
clothes.groupBy { it[1] }.forEach { answer *= (it.value.size + 1) }
return answer - 1
}
}
이번 문제는 GroupBy를 통하여 문제를 해결해 보았습니다.
코드 풀이
headgear | yellow_hat |
green_turban |
eyewear | blue_sunglasses |
headgear을 착용하는 경우의 수는 3가지입니다.
1. yellow_hat을 착용합니다.
2. green_turban을 착용합니다.
3. 아무것도 입지 않는다.
eyewear을 착용하는 경우의 수는 2가지입니다.
1. blue_sunglasses을 착용합니다.
2. 아무것도 입지 않는다.
그래서 3 * 2를 하면 6을 얻을 수 있습니다. 여기서 문제에서 코니는 하루에 최소 한 개의 의상은 입기 때문에 아무것도 입지 않는 경우의 수는 제외해줘야 합니다. 그래서 (3 * 2) - 1을 해주면 값을 얻을 수 있습니다. 이것을 코드로 알아보도록 하겠습니다.
1. groupBy을 통해서 종류들의 경우의 수를 구해줍니다.
clothes.groupBy { it[1] }
2. groupBy로 구해진 값을 forEach로 모든 경우의 수를 구해줍니다.
// 여기에서 입지 않는 경우의 수도 더하기 1 해줍니다.
forEach { answer *= (it.value.size + 1) }
3. 마지막으로 아무것도 입지 않는 경우의 수를 제외해 줍니다.
return answer - 1
1. 다른 사람 코드
class Solution {
fun solution(clothes: Array<Array<String>>): Int {
return clothes.groupBy { it[1] }.values.fold(1) { acc, v -> acc * (v.size + 1) } - 1
}
}
이번 코드는 저와 비슷한 방법으로 문제를 풀이한 코드지만 kotlin에서 제공해주는 컬랙션 내의 데이터를 모두 모으는 fold함수를 사용한 것이 눈에 띄워서 공부용으로 가져와보았습니다. fold함수를 통해서 초기값을 1로 설정하고 문제를 풀이한 것을 확인할 수 있었습니다. 코틀린에서 제공해주는 함수를 잘 활용하도록 저도 열심히 연습해봐야겠습니다.
Performance
1. 내가 작성한 코드 | 2. 다른 사람 코드 |
반응형
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 행렬의 곱셈 풀이 Kotlin (0) | 2024.01.19 |
---|---|
[프로그래머스] 모의고사 풀이 Kotlin (0) | 2024.01.17 |
[프로그래머스] 과일장수 풀이 Kotlin (0) | 2024.01.16 |
[프로그래머스] 2016년 Kotlin (0) | 2024.01.14 |
[프로그래머스] H-Index Kotlin (2) | 2024.01.13 |