ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ ํ์ด
์ฌ์ฉ ์ธ์ด : ์๋ฐ์คํฌ๋ฆฝํธ JavaScript JS
1. ์ฝ๋ผ์ธ ์ถ์ธก
1) โ ๋ฌธ์ ์ค๋ช
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์ ๋ฐํํด ์ฃผ์ธ์.
2) ๐ซ ์ ํ ์ฌํญ
- ์ ๋ ฅ๋ ์, num์ 1 ์ด์ 8,000,000 ๋ฏธ๋ง์ธ ์ ์์ ๋๋ค.
3) โ๏ธ ์ ์ถ๋ ฅ ์
n | result |
6 | 8 |
16 | 4 |
626331 | -1 |
์ ์ถ๋ ฅ ์ ์ค๋ช
- ์
์ถ๋ ฅ ์ #1
- ๋ฌธ์ ์ ์ค๋ช ๊ณผ ๊ฐ์ต๋๋ค.
- ์
์ถ๋ ฅ ์ #2
- 16 → 8 → 4 → 2 → 1 ์ด ๋์ด ์ด 4๋ฒ ๋ง์ 1์ด ๋ฉ๋๋ค.
- ์
์ถ๋ ฅ ์ #3
- 626331์ 500๋ฒ์ ์๋ํด๋ 1์ด ๋์ง ๋ชปํ๋ฏ๋ก -1์ ๋ฆฌํดํด์ผ ํฉ๋๋ค.
2. ์ฌ์ฉํ ๋ฉ์๋: if๋ฌธ, while๋ฌธ
์ฃผ์ด์ง ์ num์ด 1์ธ ๊ฒฝ์ฐ์๋ 0์ returnํ๊ณ , ์์ ์ 500๋ฒ ๋ฐ๋ณตํ ๋๊น์ง num์ด 1์ด ๋์ง ์๋๋ค๋ฉด -1์ ๋ฐํํ๋ผ๋ ๊ฒ๊ณผ ๊ฐ์ ์กฐ๊ฑด๋ค์ด ๋ง์์ if๋ฌธ๊ณผ while๋ฌธ์ผ๋ก ์ ๊ทผํ์ฌ ํ์ด ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๋ค.
3. ๋ต์
1) ๋์ ํ์ด
const solution = (num) => {
let result = 0;
if (num === 1) return 0
while (num !== 1) {
if (num%2 === 0) {
result++
num /= 2
} else {
result++
num = num*3 + 1
}
}
if (result>500) return -1
else return result
}
- ๋จผ์ num์ด 1์ด ๋ ๋๊น์ง ๋ช ๋ฒ์ ์์ ์ด ์ํ๋์๋์ง ์นด์ดํธํ๊ธฐ ์ํด result๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ์๋ค.
- ๋ฌธ์ ๋๋ก๋ผ๋ฉด, ๋ง์ฝ ์ฃผ์ด์ง num์ด 1์ด๋ฉด ์ด๋ฌํ ์์ ์ ์ํํ ํ์ ์์ด 0์ ๋ฆฌํดํ๋ฉด ๋๋ฏ๋ก if (num === 1) return 0์ ์์ฑํด์ฃผ์๋ค.
- num์ด 1์ด ์๋๋ผ๋ฉด 0์ ๋ฆฌํดํ์ง ์๊ณ while๋ฌธ์ผ๋ก ๋ค์ด๊ฐ์ num์ด ๊ฐ๊ฐ ์ง์์ผ ๋์ ํ์์ผ ๋, ๋๋๊ธฐ2 ๋๋ ๊ณฑํ๊ธฐ3+1์ ์ํํ๋ฉฐ, ์์ ์ ์ํํ ๋๋ง๋ค result++๋ก ์์ ์ํ ํ์๋ฅผ ๋ํด์ฃผ์๋ค.
- while๋ฌธ ์๋๋ก๋ ๋ง์ฝ ์์ ์ํ ํ์๊ฐ 500๋ฒ์ ์ด๊ณผํ๋ฉด -1์ ๋ฆฌํดํ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋๋ก if (result>500) return -1์ ์์ฑํด์ฃผ์๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ ์ํ ํ์์ธ result๋ฅผ ๋ฆฌํดํ๋๋ก ํ๋ค.
2) ๋ค๋ฅธ ์ฌ๋์ ํ์ด
// ์ฌ๊ทํจ์
function collatz(num, count = 0) {
return (num == 1) ? ((count >= 500) ? -1 : count) : collatz((num % 2 == 0) ? num / 2 : (num * 3) + 1, ++count);
}
- ์ฌ๊ทํจ์๋ ๋ง ๊ทธ๋๋ก ํจ์ ๋ด์์ ํจ์ ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํด ์์ ์ ์ํํ๋ ๋ฐฉ์์ ๋งํ๋ค.
- num์ด 1์ด๋ฉด ((count >= 500 ? -1 : count)๋ฌธ์ผ๋ก ๋ค์ด๊ฐ๋๋ฐ, ์ด ๋ count๋ 0์ด๋ฏ๋ก count, ์ฆ 0์ ๋ฆฌํดํ๋ค.
- num์ด 1์ด ์๋๋ฉด collatz((num % 2 == 0) ? num / 2 : (num * 3) + 1, ++count)์์ ์์ ์ ์คํํ๋ฉฐ count์ ์์ ์คํ ํ์๋ฅผ ๋ํ๋ค.
- count๊ฐ 500 ์ด์์ด ๋๋ฉด ์ฌ๊ทํจ์์์ ๋น ์ ธ๋์ -1์ ๋ฆฌํดํ๋ค.
'๐ป Programming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ์ง์๋ ์ซ์ด์ (0) | 2023.08.03 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] 369๊ฒ์ (0) | 2023.08.02 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ๊ฐ๊น์ด 1 ์ฐพ๊ธฐ (0) | 2023.07.28 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ํน๋ณํ ์ด์ฐจ์ ๋ฐฐ์ด 2 (0) | 2023.07.28 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv. 0] ๋ฐฐ์ด ํ์ ์ํค๊ธฐ (2) | 2023.07.26 |