반응형
class Solution {
public int solution(int[] arr) {
int answer = 0;
int count = 0;
int[] beforeArr = new int[arr.length];
while (count != arr.length) {
count = calculate(arr, beforeArr, count);
answer++;
}
return answer - 1;
}
private int calculate(int[] arr, int[] beforeArr, int count) {
count = 0;
beforeArr = arr.clone();
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0 && arr[i] >= 50) {
arr[i] /= 2;
} else if (arr[i] % 2 != 0 && arr[i] < 50) {
arr[i] = arr[i] * 2 + 1;
}
if (arr[i] == beforeArr[i]) {
count++;
}
}
return count;
}
}
풀이방법 :
1. arr 배열의 길이만큼 작업을 수행해준다.
2. 배열의 길이만큼 수행이 됐다면 n번째와 n-1번째의 배열이 같다는 뜻이므로,
answer -1 을 반환해준다.
3. arr 배열의 값은 배열의 길이만큼 작업을 수행하여 연산이 완료되어 있어야한다.
작업해주는 메서드를 분리하여 계산해보았다.
answer 수 만큼 calculate 메서드를 실행하며,
메서드 안에서 이전 배열과 현재 배열이 같다면
count가 배열의 길이만큼 증가하기 때문에 while 조건을 만족하지 못해
실행이 종료되며 answer-1 이 반환된다.
반응형