자료구조&알고리즘/프로그래머스
[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;
}
}