[Lv. 0] 조건에 맞게 수열 변환하기 2프로그래머스/Level 02023. 5. 4. 13:54
Table of Contents
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/181881
난이도 : Level.0
언어 : Kotlin
문제 설명 :
정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.
이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.
단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
제한 사항 :
- 1 ≤ arr의 길이 ≤ 1,000,000
- 1 ≤ arr의 원소의 값 ≤ 100
입출력 예 :
arr | result |
[1, 2, 3, 100, 99, 98] | 5 |
풀이 :
import java.util.*
class Solution {
fun solution(arr: IntArray): Int {
var answer: Int = 0
var array = arr
while (true) {
val temp = array.map { if (it >= 50 && it % 2 == 0) it / 2 else if (it % 2 == 1) if (it * 2 + 1 >= 100) it else it * 2 + 1 else it }.toIntArray()
if (array.contentEquals(temp)) break
Arrays.setAll(array) { temp[it] }
answer++
}
return answer
}
}
Arrays.setAll(array) { temp[it] }
이 부분(배열을 주어진 값으로 초기화하는 것)을 혼자서 떠올리지 못하였기에 다른 사람의 풀이를 참고하여 넣었다.
Arrays.setAll() 함수는 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다.
'프로그래머스 > Level 0' 카테고리의 다른 글
[Lv. 0] 수열과 구간 쿼리 1 (0) | 2023.05.04 |
---|---|
[Lv. 0] 조건에 맞게 수열 변환하기 1 (0) | 2023.05.04 |
[Lv. 0] 1로 만들기 (0) | 2023.05.03 |
[Lv. 0] 길이에 따른 연산 (1) | 2023.05.03 |
[Lv. 0] 원하는 문자열 찾기 (0) | 2023.05.03 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!