코딩테스트

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

liz_devel 2025. 1. 19. 14:56

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(arr: IntArray): Int {
  var prevList = arr.toList() // 초기 리스트 상태 저장
        var currentList = arr.toList() // 현재 리스트
        var count = 0

        while (true) {
            currentList = prevList.map { v ->
                if (v >= 50 && v % 2 == 0) {
                    v / 2
                } else if (v < 50 && v % 2 != 0) {
                    v * 2 + 1
                } else {
                    v
                }
            }

            if (prevList == currentList) { // 두 리스트가 같다면 종료
                break
            }

            prevList = currentList // 상태 갱신
            count++
        }

        return count
    }
}

 


📝 다른 사람의 문제 풀이

import java.util.*

class Solution {
    fun solution(arr: IntArray): Int {
        var i = 0
        val array = arr

        while (true) {
            val newArray = array.map { operand ->
                if (operand > 49 && operand % 2 == 0) operand / 2
                else if (50 > operand && operand % 2 == 1) operand * 2 + 1
                else operand
            }.toIntArray()

            if (array.contentEquals(newArray)) break
            Arrays.setAll(array) { newArray[it] }
            i++
        }
        return i
    }
}

🖊 문제 풀이 시 알면 좋을 것

contentEquals

  • 설명: 두 배열이 같은 크기와 같은 요소를 가지는지 비교.
  • 사용 대상: 배열 (Array, IntArray 등).
  • 반환 타입: Boolean.
val arr1 = intArrayOf(1, 2, 3)
val arr2 = intArrayOf(1, 2, 3)
println(arr1.contentEquals(arr2)) // true

 

Arrays.setAll

  • 설명: 배열의 각 요소를 주어진 람다식으로 업데이트.
  • 사용 대상: Array 및 기본 타입 배열 (IntArray, DoubleArray 등).
  • 반환 타입: 없음 (Unit).
val arr = IntArray(5) { it } // [0, 1, 2, 3, 4]
Arrays.setAll(arr) { it * 2 } // [0, 2, 4, 6, 8]

 

mapIndexed

  • 설명: 각 요소와 해당 인덱스를 함께 사용하여 변환.
  • 사용 대상: List, Array 등.
  • 반환 타입: List.
val list = listOf(1, 2, 3)
val result = list.mapIndexed { index, value -> index * value }
println(result) // [0, 2, 6]
반응형