🗒 문제


📝 나의 문제풀이
class Solution {
fun solution(array: IntArray, n: Int): Int {
return array.minWithOrNull(compareBy(
{kotlin.math.abs(it - n)}, {it}))!!
}
}
📝 다른 사람의 문제 풀이
다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.
class Solution {
fun solution(array: IntArray, n: Int): Int =
array.sortedWith(compareBy<Int> { Math.abs(it - n) }
.thenBy { it })
.first()
🖊 문제 풀이 시 알면 좋을 것
minWithOrNull
- 컬렉션(리스트, 배열 등)에서 최소값을 찾아주는 함수
- 그냥 최소값이 아니라, **비교 기준(comparator)**을 지정해서 찾을 수 있음
- 값이 없을 수 있으므로 null 가능 → 필요하면 !!로 null 아님 단언
기본 예시
val numbers = listOf(5, 3, 8)
val minNumber = numbers.minWithOrNull(compareBy { it }) // 그냥 숫자 기준
println(minNumber) // 3
- 여기서 compareBy { it } = 그냥 값 그대로 비교
- 결과: 3 → 최소값
비교 기준 바꾸기
val numbers = listOf(5, 3, 8, 3)
val minNumber = numbers.minWithOrNull(compareBy { it % 2 })
println(minNumber) // 8
- 기준: it % 2 → 짝수(0) 먼저, 홀수(1) 나중
- 최소값 = 짝수 중 가장 작은 것
compareBy
- 정렬이나 최소/최대 비교 기준을 정의할 때 사용
- compareBy({ 기준1 }, { 기준2 })처럼 여러 기준도 가능
예시: 두 기준 사용
val numbers = listOf(10, 16, 11, 12)
val n = 13
val closest = numbers.minWithOrNull(compareBy({ kotlin.math.abs(it - n) }, { it }))
println(closest) // 12
단계별 계산
| 원소 | abs(it - n) | 비교 기준 (튜플) |
| 10 | 3 | (3, 10) |
| 16 | 3 | (3, 16) |
| 11 | 2 | (2, 11) |
| 12 | 1 | (1, 12) |
- 최소값 = (1, 12) → 반환값 12
- 비교 순서: 첫 번째 요소 기준 → 최소 (1, 12) 선택
- 리턴값: 12 (원래 원소)
- 기준값 튜플은 비교용일 뿐, 실제 리턴되는 값은 원소 자체
반응형
'코딩테스트' 카테고리의 다른 글
| [프로그래머스] k의 개수 (0) | 2025.12.22 |
|---|---|
| [프로그래머스] 2차원으로 만들기 (0) | 2025.12.22 |
| [프로그래머스] 진료순서 정하기 (0) | 2025.12.22 |
| [프로그래머스] 숨어있는 숫자의 덧셈 (2) (0) | 2025.12.22 |
| [프로그래머스] 한 번만 등장한 문자 (0) | 2025.12.22 |