
Solution 1) 내 풀이
class Solution {
public int solution(int[] arr) {
boolean isClone = false;
int answer = 0;
while (!isClone) {
answer++;
int cut = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 50 && arr[i] % 2 == 0) {
arr[i] = arr[i] / 2;
cut++;
} else if (arr[i] <= 50 && arr[i] % 2 != 0) {
arr[i] = (arr[i] * 2) + 1;
cut++;
}
}
if (cut == 0) {
isClone = true;
}
}
return answer - 1;
}
}
Solution 2) 다른 사람의 풀이_참고 해서 내 풀이 다듬기
class Solution {
public int solution(int[] arr) {
int answer = 0;
while (true) {
boolean isClone = false;
answer++;
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 50 && arr[i] % 2 == 0) {
arr[i] = arr[i] / 2;
isClone = true;
} else if (arr[i] <= 50 && arr[i] % 2 != 0) {
arr[i] = (arr[i] * 2) + 1;
isClone = true;
}
}
if (!isClone) {
break;
}
}
return answer - 1;
}
}
코드 및 문제 리뷰
배열 안의 요소를 조건에 맞게 (50 보다 크고 짝수면 나누기 2, 50 보다 작고 홀수면 곱하기 2 후에 + 1) 반복을 하다,
더이상 조건안의 내용을 만족하는 수가 없을 때가 온다. (50 보다 크지만 홀수만 있고, 50 보다 작지만 짝수만 있는 경우)
조건문을 만족하여 배열이 다시 생성 되는 행위를 반복 횟수 1이라고 했을 때, 반복을 해도 변하지 않는 경우가 됐을 때의 수를 반환하는 문제이다.
나는 처음에 배열 밖에 카운트를 두고, boolean을 둬 반복문 안에서 조건에 만족하는 case에 카운트를 올린 뒤, 반복문 끝에 카운트가 0 인 경우 boolan을 true로 바꾸어 반복문을 최종 탈출하게 만들었다.
다른 사람의 풀이를 보니 굳이 그럴 필요 없이 while문을 기본 true로 무한 반복 시킨 뒤 반복문 안에 카운트 없이 boolean을 초기값 false로 두어 조건문에 한번이라도 만족하면 이를 true로 바꾼다. 결국 조건문을 한번도 만족하지 못할 경우 boolean은 그대로 false인 상태로 break 조건문을 만나게 돼 최종 탈출을 하게 된다.
boolean Flag를 아직 많이 사용해보지 못했는데, 연습하기에 좋은 문제였다고 생각한다.
'연습문제 > 프로그래머스, 기초 트레이닝' 카테고리의 다른 글
| [프로그래머스 기초_java] 길이에 따른 연산 (0) | 2023.10.31 |
|---|---|
| [프로그래머스 기초_java] 1로 만들기 (0) | 2023.10.31 |
| [프로그래머스 기초_java] 조건에 맞게 수열 변환하기 1 (0) | 2023.10.31 |
| [프로그래머스 기초_java] 수열과 구간 쿼리 1 (0) | 2023.10.30 |
| [프로그래머스 기초_java] n보다 커질 때까지 더하기 (1) | 2023.10.30 |