관리 메뉴

나만을 위한 블로그

[Algorithm] 프로그래머스 - 짝수는 싫어요 (Kotlin) 본문

알고리즘 문제 풀이/프로그래머스

[Algorithm] 프로그래머스 - 짝수는 싫어요 (Kotlin)

참깨빵위에참깨빵_ 2022. 12. 20. 20:32
728x90
반응형
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 리턴하도록
solution()을 완성하라

 

문제의 정답 코드에는 solution()이 IntArray를 리턴하도록 되어 있다. 이것에 맞춰서 작성한다면 아래와 같이 할 수 있다.

 

fun solution(n: Int): IntArray {
    val result = arrayListOf<Int>()
    for (i in 1 .. n) {
        if (i % 2 != 0) {
            result.add(i)
        }
    }

    return result.toIntArray()
}

 

n 이하의 홀수라고 했기 때문에 n도 포함해야 한다. 그래서 for문의 조건에 intRange를 리턴하는 ".."을 썼다. until은 단어 자체의 의미처럼 마지막 숫자를 제외하는 intRange를 리턴하기 때문에 사용하면 안 된다.

그리고 for문 안에서 짝수인지 확인한 다음 홀수인 경우에만 ArrayList에 담고, 리턴할 때는 toIntArray()를 써서 IntArray로 변환해서 리턴하면 된다.

 

다른 사람들은 어떻게 풀었는지 확인해 봤다.

 

class Solution {
    fun solution(n: Int) = (0..n).filter { it % 2 == 1 }.toIntArray()
}

 

위에서 ".."은 intRange라고 했다. 코틀린 공식문서에서도 볼 수 있듯 intRange는 이름 그대로 정수들로 이뤄진 범위를 말한다. 난 정수로 이뤄진 하나의 그룹이라고 이해하려고 한다.

이 intRange는 닫힌 구간(Closed range)이다. 코틀린 공식문서에선 닫힌 구간에 대해 아래와 같이 설명하고 있다.

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.ranges/-closed-range/

 

ClosedRange - Kotlin Programming Language

 

kotlinlang.org

하한과 상한이 모두 범위에 포함되는 값의 범위(숫자 또는 문자)를 나타낸다

 

어디부터 어디까지라고 구간을 정했기 때문에 나는 시작값, 끝값을 모두 알 수 있다. 공식문서의 코드 스니펫은 아래와 같다.

 

if (i in 1..4) { // equivalent of i >= 1 && i <= 4
    print(i)
}

 

그리고 이렇게 만들어진 intRange에는 filter {}를 써서 내가 원하는 값만 가져오도록 처리할 수 있다.

filter {} 안에 홀짝을 판별하는 로직을 넣고, intArray()로 변환한 코드다. 내가 짠 코드도 정답 처리는 됐지만 더 가독성 좋고 간결하게 짜려면 어떻게 할지 고민하는 것이 어렵다고 느꼈다.

반응형
Comments