프로그래머스 - 최댓값과 최솟값

woga·2025년 1월 5일
0

알고리즘

목록 보기
24/26
post-thumbnail

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/12939?language=kotlin

문제 난이도

Lv 2

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

제한 조건
s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

문제 풀이

풀이 자체는 쉬운 사고를 요하는 편이었다. 근데 어차피 map을 이용해서 최대값과 최소값을 찾을거면 추상화된 operator 함수가 필요없지 않나 하고 정석대로 풀었다. (시간복잡도는 똑같이 O(n)이겠지만...)

 fun solution(s: String): String {
        var min = Int.MAX_VALUE
        var max = Int.MIN_VALUE
        s.split(" ").forEach {
            val num = it.toInt()
            if (num < min) {
                min = num
            }
            if (num > max) {
                max = num
            }
        }
        return "$min $max"
    }

근데 다른 사람 풀이 보다보니 let을 이용했길래 신기했다. 보통 알고 풀 때 잘 이용안하는 거 같은데 let 확장함수는 반환값이 있는 함수다보니 이렇게도 가능하더라

fun <T, R> T.let(block: (T) -> R): R


class Solution {
    fun solution(s: String): String = s.split(" ").map { it.toInt() }.let { "${it.min()} ${it.max()}" }
}
profile
와니와니와니와니 당근당근

0개의 댓글

관련 채용 정보