class Solution {
fun solution(a: Int, b: Int, c: Int, d: Int): Int {
val list = listOf(a, b, c, d)
val group = list.groupBy{ it }
return when(group.size){
1 -> 1111 * a
2 -> {
val (key1, key2) = group.keys.toList()
if(group[key1]?.size == 3){
(10 * key1 + key2) * (10 * key1 + key2)
}else if(group[key2]?.size == 3){
(10 * key2 + key1) * (10 * key2 + key1)
}else {
(key1 + key2) * Math.abs(key1 - key2)
}
}
3 -> {
val(q, r) = group.keys.toList().filter{ group[it]?.size == 1}
q * r
}
else -> list.minOrNull() ?: -1
}
}
}
import kotlin.math.*
class Solution {
fun solution(a: Int, b: Int, c: Int, d: Int): Int {
val map = listOf(a, b, c, d).groupingBy { it }.eachCount()
return when (map.maxOf { it.value }) {
4 -> a * 1111
3 -> {
val p = map.entries.first { it.value == 3 }.key
val q = map.entries.first { it.value == 1 }.key
(10 * p + q).let { it * it }
}
2 -> {
if (map.size == 2) {
val p = map.entries.first { it.value == 2 }.key
val q = map.entries.last { it.value == 2 }.key
(p + q) * abs(p - q)
} else {
map.entries.filter { it.value != 2 }
.map { it.key }
.reduce { acc, n -> acc * n }
}
}
else -> map.minOf { it.key }
}
}
}
groupBy()
val names = listOf("Alice", "Bob", "Charlie", "David")
val groupedByFirstLetter = names.groupBy { it.first() }
// 결과: {A=[Alice], B=[Bob], C=[Charlie], D=[David]}
groupingBy()
val names = listOf("Alice", "Bob", "Alice", "Charlie")
val grouping = names.groupingBy { it }
val count = grouping.eachCount()
// 결과: {Alice=2, Bob=1, Charlie=1}
*잠깐!
groupBy()
랑 groupingBy()
랑 어떻게 다른지 자세히 설명해줘!
구분 | groupBy | groupingBy |
---|---|---|
반환 값 | 즉시 Map 반환 | 추가 처리를 위한 Grouping 객체 반환 |
결과 출력 방식 | 바로 사용 가능 | 추가 처리가 필요 |
사용 목적 | 그룹화 결과가 즉시 필요할 때 | 그룹화 후 추가 작업(예: 합산, 필터링) |
eachCount()
val names = listOf("Alice", "Bob", "Alice")
val count = names.groupingBy { it }.eachCount()
// 결과: {Alice=2, Bob=1}
maxOf
val numbers = listOf(1, 2, 3, 4)
val max = numbers.maxOf { it }
// 결과: 4
entries
val map = mapOf("Alice" to 25, "Bob" to 30)
val entries = map.entries
// 결과: [Alice=25, Bob=30]
abs()
val number = -10
val absolute = abs(number)
// 결과: 10
reduce
val numbers = listOf(1, 2, 3, 4)
val sum = numbers.reduce { acc, num -> acc + num }
// 결과: 10
minOf
val numbers = listOf(1, 2, 3, 4)
val min = numbers.minOf { it }
// 결과: 1
문제에 |p-q|에서 ||를 두는 것이 절대값이라는 것을 모르고 절대값을 고려 안 하고 문제를 제출하여 계속해서 실패하는 케이스가 발생하여 애먹었다. 문제에는 이유없이 쓴 것들이 없다. ||처럼 모르는 기호가 나오면 확인하고 문제를 풀어야겠다.