

문제 설명
정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.
이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.
단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.입출력 예
arr result [1, 2, 3, 100, 99, 98] 5
- 주어진 배열 arr을 복사하여 결과 배열 result를 초기화.
- result 배열을 생성하기 위해 반복문 사용. 반복 횟수를 나타내는 변수 x를 0으로 초기화하고, 작업 결과를 저장할 배열 nextArr를 result의 복사본으로 초기화.
- nextArr 배열을 순회하면서 작업을 수행. 배열의 각 원소에 대해 조건에 따라 값을 변경한다.
- 작업이 완료된 nextArr 배열과 이전 result 배열을 비교하여 같은지 확인. 만약 같다면 x를 반환.
- 작업이 완료된 nextArr 배열을 result 배열로 갱신.
- x를 1 증가시킨 후 3단계부터 다시 반복.
function arraysEqual(arr1, arr2) {
if (arr1.length !== arr2.length) {
return false;
}
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
function solution(arr) {
let x = 0;
let result = [...arr];
while (true) {
const nextArr = [...result];
for (let i = 0; i < nextArr.length; i++) {
if (nextArr[i] >= 50 && nextArr[i] % 2 === 0) {
nextArr[i] /= 2;
} else if (nextArr[i] < 50 && nextArr[i] % 2 === 1) {
nextArr[i] = nextArr[i] * 2 + 1;
}
}
if (arraysEqual(nextArr, result)) {
return x;
}
result = nextArr;
x++;
}
}