자료구조&알고리즘/프로그래머스

[Programmers] 조건에 맞게 수열 변환하기 2 (JAVA, PYTHON)

고쩡이 2023. 11. 29. 13:02

https://school.programmers.co.kr/learn/courses/30/lessons/181881?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

Algorithm

Idea

이전 배열에 연산 이전 값을 저장하고 연산후와 비교하는 과정을 반복한다.


Python

def solution(arr):
    answer = 0
    
    idx = 0
    prev = arr
    
    while True:
        change = []
        for i in prev:
            if i > 50 and i % 2 == 0:
                change.append(i / 2)
            elif i < 50 and i % 2 == 1:
                change.append(i * 2 + 1)
            else: change.append(i)
        
        same = all(a == b for a, b in zip(prev,change))
        if same:
            break
        idx += 1
        
        prev = change
    
    return idx

Java

import java.util.Arrays;

class Solution {
    public int solution(int[] arr) {
        int count = 0;
        int[] beforeArr = arr.clone();

        while (true) {
            int[] change = beforeArr.clone();
            for (int i = 0; i < beforeArr.length; i++) {
                if (beforeArr[i] % 2 == 0 && beforeArr[i] >= 50) {
                    change[i] = beforeArr[i] / 2;
                } else if (beforeArr[i] % 2 != 0 && beforeArr[i] < 50) {
                    change[i] = beforeArr[i] * 2 + 1;
                }
            }
            if (Arrays.equals(beforeArr, change)) {
                break; // 배열에 변화가 없으면 종료
            }        
            count++;

            beforeArr = change;
        }
        return count;
    }
}