코딩테스트
[프로그래머스] 조건에 맞게 수열 변환하기 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]
반응형