본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 조건에 맞게 수열 변환하기 2

728x90

코드 힌트

  1. 초기화와 플래그 설정
    • result 변수는 연산 횟수를 기록하며, flag는 배열의 변화를 감지하는 데 사용됩니다.
    • 이 반복문은 배열이 더 이상 변하지 않을 때까지 실행됩니다.
  2. 조건에 따른 배열 요소 수정
    • 첫 번째 조건: 배열 요소가 50 이상이면서 짝수일 때, 해당 요소를 절반으로 나눕니다.
    • 두 번째 조건: 배열 요소가 50 미만이면서 홀수일 때, 해당 요소를 두 배로 하고 1을 더합니다.
    • 각 조건이 만족되면, 배열이 변한 것이므로 flag를 false로 설정하여 반복을 계속하도록 합니다.
  3. 반복 횟수 증가
    • 매번 반복이 끝날 때마다 result를 증가시켜 연산 횟수를 기록합니다.
  4. 최종 결과 반환
    • 마지막 반복이 완료된 후에는 실제 연산 횟수에서 1을 뺀 값을 반환합니다. 이는 마지막 반복에서 배열에 변화가 없었기 때문에 그 시점의 result는 필요 없습니다.

 


정답은 더보기 클릭

더보기
class Solution {
    public int solution(int[] arr) {
        int result = 0;  // 연산 횟수를 저장할 변수
        boolean flag = false;  // 배열이 더 이상 변화하지 않는지 확인하기 위한 플래그
        
        // 배열이 더 이상 변화하지 않을 때까지 반복
        while (!flag) {
            flag = true;  // 매 반복 시 플래그를 true로 설정
            for (int i = 0; i < arr.length; i++) {
                // 현재 요소가 50 이상이고 짝수인 경우
                if (arr[i] >= 50 && arr[i] % 2 == 0) {
                    arr[i] /= 2;  // 요소를 절반으로 나눈다
                    flag = false;  // 배열이 변화했으므로 플래그를 false로 설정
                }
                // 현재 요소가 50 미만이고 홀수인 경우
                else if(arr[i] < 50 && arr[i] % 2 == 1) {
                    arr[i] = arr[i] * 2 + 1;  // 요소를 두 배로 하고 1을 더한다
                    flag = false;  // 배열이 변화했으므로 플래그를 false로 설정
                }
            }
            result++;  // 반복이 끝날 때마다 연산 횟수 증가
        }
        
        return result-1;  // 최종적으로 연산 횟수에서 1을 빼서 반환
    }
}
728x90