관리 메뉴

나만을 위한 블로그

[Algorithm] 프로그래머스 - 조건에 맞게 수열 변환하기 2 (Kotlin) 본문

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

[Algorithm] 프로그래머스 - 조건에 맞게 수열 변환하기 2 (Kotlin)

참깨빵위에참깨빵_ 2024. 5. 18. 00:00
728x90
반응형

 

변환 규칙은 1과 유사해서 만들기 어렵지 않았지만 이후 풀지 못해서 챗지피티에 물어봤다.

 

class Solution {
    fun solution(arr: IntArray): Int {
        var current = arr.copyOf()
        var next: IntArray
        var count = 0

        while (true) {
            next = current.map { num ->
                when {
                    num >= 50 && num % 2 == 0 -> num / 2
                    num < 50 && num % 2 != 0 -> num * 2 + 1
                    else -> num
                }
            }.toIntArray()

            if (next contentEquals current) {
                break
            }
            current = next
            count++
        }

        return count
    }
}

 

변환 규칙을 배열의 모든 원소에 적용해서 새 배열을 생성하고, 배열이 더 이상 변하지 않을 때까지 변환을 반복한다. 그리고 몇 번 반복했는지 횟수(count)를 세서 리턴한다.

중간에 contentEquals라는 키워드가 있는데 처음 보는 거라 찾아보니 아래와 같다.

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/content-equals.html

 

contentEquals - Kotlin Programming Language

 

kotlinlang.org

지정된 두 배열이 구조적으로 서로 같을 경우, 즉 같은 수의 같은 요소를 같은 순서로 포함할 경우 true를 리턴한다. 요소의 동일성 여부는 equals 함수를 써서 비교한다. 부동소수점 숫자의 경우 NaN은 그 자체와 같고 -0.0은 0.0과 같지 않다

 

배열의 원소들이 규칙에 의해 변환되지 않을 때까지 변환됐다면 break로 무한 while문을 통과한 후, count를 리턴한다.

반응형
Comments