[작성일: 2023. 10. 18]
풀이
class Solution {
public int solution(int[] arr) {
int answer = 0;
int count = 0;
while(count < arr.length){
count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] >=50 && arr[i] % 2 == 0) {
arr[i] /= 2;
} else if (arr[i] < 50 && arr[i] % 2 != 0) {
arr[i] = (arr[i] * 2) + 1;
} else {
count++;
}
}
answer++;
}
return answer - 1;
}
}
아 이 문제 쉬운 거 같으면서도 헷갈려서 머리 터질 뻔 했다...
분명히 맞게 풀었는데도 답이 5가 아니라 4가 나와서 하루종일 고민하다가 그냥 구글링의 도움을 받았다.
우선 count라는 변수를 만든다. 문제의 조건에 나왔던 원소가 50보다 크고 짝수거나, 원소가 50보다 작고 홀수인 경우 외에는 count를 증가시킨다. 이 count는 while문에서도 사용되는데 전체 배열의 길이보다 작을 때까지 반복된다.
count 변수가 전체 배열 길이보다 작다는 것은 아직 조건에 만족하는 원소가 존재한다는 의미이다.
만약 count 변수가 전체 배열 길이보다 크거나 같아지면 조건에 맞는 원소가 더 이상 존재하지 않는 것으로 간주하고 반복을 종료한다.
그리고 반복이 한 번 실행될 때마다 answer을 1 증가시킨다.
return문에서 answer-1을 하는 이유는 배열의 모든 요소가 조건을 만족하는 경우에도 우선 반복문이 한 번 더 실행되기 때문에 마지막에 -1을 해줘야 올바른 answer을 반환할 수 있다.