๐ก
50๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ง์ -> 2๋ก ๋๋๊ณ
50๋ณด๋ค ์์ ํ์ -> 2๋ฅผ ๊ณฑํ๊ณ +1 ์ ํด์ค๋ค.
์ด ์์ ์ x ๋ฒ ๋ฐ๋ณตํ ๊ฒฐ๊ณผ๊ฐ ๋ฐฐ์ด arr(x) ๊ฐ ๋๋ฉด
arr(x) = arr(x) + 1 ์ด ๋๋ x ๊ฐ ์กด์ฌํ๋๋ฐ
์ด x ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ๋ฆฌํดํ๋ค.
----------------
ํ์ฌ ๋ฐฐ์ด๊ณผ ๊ทธ ์ ๋ฐฐ์ด์ ๋น๊ตํ ์ ์๊ฒ
๋ฐฐ์ด์ ๋ณต์ฌํด์ ๋น๊ตํด์ค์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ x ๋งํผ ๋ฐ๋ณตํด์ฃผ๊ธฐ ์ํด์ while ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ค๋ค.
---------------
1) ์์ ๋ณต์ฌ
์์ ๋ณต์ฌ๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ (๊ณต์ ํจ) => ํจ๊ป ๋ณ๊ฒฝ
๊น์ ๋ณต์ฌ๋ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด๊ฐ ๋๋ค.
2) cnt ์ฌ์ฉ
if (arr[i] == a[i])
๋ ๋ฐฐ์ด์ ๋น๊ตํด์ ๊ฐ์ ๊ฐ์ด ๋ฐฐ์ด ๊ธธ์ด๋งํผ ๋๋ฉด ๊ทธ ๊ฐ์ด ๊ฐ์ ๊ฐ์ด๋ค.
while ๋ฌธ์ ๋ ๋ฐฐ์ด์ด ๊ฐ์ ๋ ๊น์ง ๋ฐ๋ณตํด์ค์ผํ๋ค.
cnt (๊ฐ์ ๊ฐ) ๋ฐฐ์ด ๊ธธ์ด๋ ๊ฐ์ ๋ ๊น์ง ๋๋ฆฐ๋ค.
3) count = -1
๊ฐ์ ๊ฐ์ ๋ฐ๊ฒฌํ๋ฉด ๊ทธ์ ์ธ๋ฑ์ค ๊ฐ์ ์ถ๋ ฅํ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ์ด -1์
๐ฌ arr.clone() :: ์์ ๋ณต์ฌํ๋ ๋ณต์ ๋ฉ์๋, arr๊ณผ arrCopy๋ ์๋ก ๋ค๋ฅธ ๋ฐฐ์ด ๊ฐ์ฒด์ด์ง๋ง, ๊ฐ ์์๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค. ( ๋ณธ ๋ฐฐ์ด๊ณผ ์๋ก ์์ฑ๋ ๋ฐฐ์ด์ ์์๋ค์ด ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐ)
class Solution {
public int solution(int[] arr) {
int answer = -1; // while ๋ฐ๋ณต ํ์ ํ์ธ
int[] a;
int cnt = 0 ;
while(cnt != arr.length) {
cnt = 0;
a = arr.clone(); // ์์ ๋ณต์ฌ (while ๋๋๋ง๋ค)
for (int i = 0 ; i < arr.length; i++) {
if (arr[i] < 50 && arr[i] % 2 != 0){
arr[i] = arr[i]*2 + 1;
}else if ( arr[i] >= 50 && arr[i] % 2 ==0){
arr[i] = arr[i]/2;
}
if (arr[i] == a[i]) {
cnt ++;
}
}
answer ++;
}
return answer;
}
}
(์คํจ) => ์ ๊ทผ์ด ์๋ชป๋๋ค ใ
์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ๊ฐ์ด ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๊ฐ๊ณผ ๊ฐ๋ค๊ณ ํ๋จํ๊ณ i-1 ์ ์ถ๋ ฅํ๋ค.
import java.util.Arrays;
class Solution {
public int solution(int[] arr) {
int answer = 0;
boolean tf = false;
int[] a = Arrays.copyOf(arr,arr.length);
while(tf = false) {
for (int i = 0 ; i < arr.length; i++) {
if ( arr[i] >= 50 && arr[i] % 2 ==0){
a[i] = arr[i]/2;
} else if (arr[i] < 50 && arr[i] % 2 != 0){
a[i] = arr[i]*2 + 1;
} else {
tf = true;
answer = i-1;
break;
}
}
};
return answer;
}
}
(์คํจ) => ์ด๋ ๊ฒํ๋ฉด ๊ฐ์ ๋ฐฐ์ด๋ผ๋ฆฌ ๋น๊ตํ๋๊ฑฐ๋ผ ์ ๋ฐฐ์ด์ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋ฉด์ ๋น๊ตํด์ผํ๋ค ใ
๊ทธ์ ๋ฐฐ์ด๋ผ๋ฆฌ ๋น๊ตํด์ ์ฐพ์๋ธ๋ค.
import java.util.Arrays;
class Solution {
public int solution(int[] arr) {
int answer = 0;
boolean tf = false;
int[] a = Arrays.copyOf(arr,arr.length);
do {
for (int i = 0 ; i < arr.length; i++) {
if ( arr[i] >= 50 && arr[i] % 2 ==0){
a[i] = arr[i]/2;
} else if (arr[i] < 50 && arr[i] % 2 != 0){
a[i] = arr[i]*2 + 1;
}
if (a[i] == a[i]){
tf = true;
answer = i - 1;
break;
}
}
}while (tf == true) ;
return answer;
}
}