✍스펙업/코딩테스트

자바 조건에 맞게 수열 변환하기2

우동한그릇 2023. 7. 16. 21:27
반응형
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 이 반환된다.

 

반응형