์ฝ๋ผ์ธ ์ถ์ธก
1937๋ Collatz๋ ์ฌ๋์ ์ํด ์ ๊ธฐ๋ ์ด ์ถ์ธก์, ์ฃผ์ด์ง ์๊ฐ 1์ด ๋ ๋๊น์ง ๋ค์ ์์ ์ ๋ฐ๋ณตํ๋ฉด, ๋ชจ๋ ์๋ฅผ 1๋ก ๋ง๋ค ์ ์๋ค๋ ์ถ์ธก์ ๋๋ค. ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1-1. ์
๋ ฅ๋ ์๊ฐ ์ง์๋ผ๋ฉด 2๋ก ๋๋๋๋ค.
1-2. ์
๋ ฅ๋ ์๊ฐ ํ์๋ผ๋ฉด 3์ ๊ณฑํ๊ณ 1์ ๋ํฉ๋๋ค.
2. ๊ฒฐ๊ณผ๋ก ๋์จ ์์ ๊ฐ์ ์์
์ 1์ด ๋ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์๊ฐ 6์ด๋ผ๋ฉด 6 โ 3 โ 10 โ 5 โ 16 โ 8 โ 4 โ 2 โ 1 ์ด ๋์ด ์ด 8๋ฒ ๋ง์ 1์ด ๋ฉ๋๋ค. ์ ์์ ์ ๋ช ๋ฒ์ด๋ ๋ฐ๋ณตํด์ผ ํ๋์ง ๋ฐํํ๋ ํจ์, solution์ ์์ฑํด ์ฃผ์ธ์. ๋จ, ์ฃผ์ด์ง ์๊ฐ 1์ธ ๊ฒฝ์ฐ์๋ 0์, ์์ ์ 500๋ฒ ๋ฐ๋ณตํ ๋๊น์ง 1์ด ๋์ง ์๋๋ค๋ฉด โ1์ ๋ฐํํด ์ฃผ์ธ์.
์ ํ ์กฐ๊ฑด
* ์ ๋ ฅ๋ ์, num์ 1 ์ด์ 8,000,000 ๋ฏธ๋ง์ธ ์ ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
์
์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์ค๋ช
๊ณผ ๊ฐ์ต๋๋ค.
์
์ถ๋ ฅ ์ #2
16 โ 8 โ 4 โ 2 โ 1 ์ด ๋์ด ์ด 4๋ฒ ๋ง์ 1์ด ๋ฉ๋๋ค.
์
์ถ๋ ฅ ์ #3
626331์ 500๋ฒ์ ์๋ํด๋ 1์ด ๋์ง ๋ชปํ๋ฏ๋ก -1์ ๋ฆฌํดํด์ผ ํฉ๋๋ค.
n | result |
---|---|
6 | 8 |
16 | 4 |
626331 | -1 |
๋ฌธ์ ํ์ด
0์ธ count๊ฐ 500์ ๋๋ฌํ ๋๊น์ง ๊ณ์ 1์ฉ ์ฆ๊ฐ์ํจ๋ค. ์ด ๋ num์ด 1์ด๋ผ๋ฉด count๋ฅผ ๋ฐํ์ํจ๋ค. num์ด ์ง์์ผ ๊ฒฝ์ฐ์๋ num์ 2๋ก ๋๋ ๊ฐ์, ํ์์ผ ๊ฒฝ์ฐ์๋ num์ 3์ ๊ณฑํ ๊ฐ์ 1์ ๋ํ ๊ฐ์ ๋ฐํํ๋ค.
function solution(num) {
var count = 0;
while (count < 500) {
if (num === 1) {
return count;
}
count ++;
num = num % 2 === 0 ? num /2 : num *3 +1;
}
return -1;
}
๋ค๋ฅธ ํ์ด ๋ฐฉ์
์ถ์ฒ : ํ๋ก๊ทธ๋๋จธ์ค ์ค์ฟจ
while๋ฌธ๊ณผ ํผ์นจ์ฐ์ฐ์๋ฅผ ํ์ฉํ์ฌ ํธ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
function collatz(num) {
var answer = 0;
while(num !=1 && answer !=500){
num%2==0 ? num = num/2 : num = num*3 +1;
answer++;
}
return num == 1 ? answer : -1;
}
// ์๋๋ ํ
์คํธ๋ก ์ถ๋ ฅํด ๋ณด๊ธฐ ์ํ ์ฝ๋์
๋๋ค.
console.log( collatz(6) );
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค Lv.1 : ํ์ค๋ ์ (1) | 2022.11.16 |
---|---|
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค Lv.1 : ํ๋ ฌ์ ๋ง์ (1) | 2022.11.16 |
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค Lv.1 : ์ง์ฌ๊ฐํ ๋ณ์ฐ๊ธฐ (2) | 2022.11.15 |
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค Lv.1 : ๋ฌธ์์ด ๋ค๋ฃจ๊ธฐ ๊ธฐ๋ณธ (1) | 2022.11.14 |
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค Lv.1 : ๊ฐ์ด๋ฐ ๊ธ์ ๊ฐ์ ธ์ค๊ธฐ (1) | 2022.11.14 |
๋๊ธ