-
[Algorithm] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (Swift/C++)Algorithm 2022. 2. 1. 13:50
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ๊ณ ๋ ๊ทธ๋ฆฌ์ค์ ์ํ์ ์๋ผํ ์คํ ๋ค์ค๊ฐ ๋ง๋ค์ด ๋ธ ์์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ง์น ์ฒด๋ก ์น๋ฏ์ด ์๋ฅผ ๊ฑธ๋ฌ๋ธ๋ค๊ณ ํด์ ๋ถ์ฌ์ง ์ด๋ฆ์ผ๋ก, ์ฃผ๋ก ๋๋์ ์์๋ฅผ ํ ๋ฒ์ ํ๋ณํ ๋ ์ฌ์ฉํ๋ค.
์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ์์๋ ์๋์ ๊ฐ๋ค.
1. ํ๋ณํ ์ซ์์ ํฌ๊ธฐ๋งํผ ๋ฐฐ์ด์ ํ ๋นํ๊ณ , ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํด๋น ๋ฐฐ์ด ์์์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค.
2. ์ซ์ 2๋ถํฐ ์์ํด์ ์ฐจ๋ก๋๋ก 2์ ๋ฐฐ์์ ํด๋นํ๋ ์ซ์๋ฅผ ์ธ๋ฑ์ค๋ก ๊ฐ์ง ๋ฐฐ์ด ์์์ ๊ฐ๋ค์ ๋ชจ๋ 0์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ด ๋, ์๊ธฐ ์์ ์ธ 2๋ ๋ณ๊ฒฝํ์ง ์๋๋ค.
3. ๋ค์์ ์ซ์ 3๋ถํฐ ์์ํด์ ์ฐจ๋ก๋๋ก 3์ ๋ฐฐ์์ ํด๋นํ๋ ์ซ์๋ฅผ ์ธ๋ฑ์ค๋ก ๊ฐ์ง ๋ฐฐ์ด ์์์ ๊ฐ๋ค์ ๋ชจ๋ 0์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ด๋ฒ์๋ ์ญ์ ์๊ธฐ ์์ ์ธ 3์ ๋ณ๊ฒฝํ์ง ์๋๋ค.
4. ์ซ์ 4์ ๊ทธ ๋ฐฐ์์ ํด๋นํ๋ ์ซ์๋ฅผ ์ธ๋ฑ์ค๋ก ๊ฐ์ง ์์๋ค์ ๊ฐ์ ๋ชจ๋ 0์ด๊ธฐ ๋๋ฌธ์, ๋ค์ ์ซ์์ธ 5๋ก ๊ฑด๋๋ด๋ค.
5. ์์ ๊ณผ์ ์ ํ๋ณํ ์ซ์์ ํฌ๊ธฐ๋งํผ ์ํํ๋ฉด ๊ฒฐ๊ตญ์ ์์๋ง ๋จ์์๊ฒ ๋๋ค.
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์์ ํ๋ณํ๊ธฐ (Swift)
var number = 1000 // ํ๋ณํ ์ซ์์ ํฌ๊ธฐ var arr = Array(0...1000) // ํ๋ณํ ์ซ์ ํฌ๊ธฐ๋งํผ ๋ฐฐ์ด ํ ๋น. ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํด๋น ๋ฐฐ์ด์ ์์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค. func solution() { arr[1] = 0 // 1์ ์์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ์๋ for ๋ฌธ์ 2๋ถํฐ ์์ํ๋ค. // ์์ ํ๋ณ ๊ณผ์ . 2๋ถํฐ number๊น์ง ์ํํ๋ค. for i in 2...number { if arr[i] == 0 { // ์ด๋ฏธ ๋ฐฐ์ด ์์๊ฐ 0์ด๋ผ๋ฉด, ์์๊ฐ ์๋๋ผ๊ณ ํ๋จํ ๊ฒ์ด๋ฏ๋ก ์๋ ์ฝ๋ ๊ฑด๋๋ฐ๊ธฐ continue } var index = i * 2 // ๋ค์ ๋ฐฐ์ ํ์ธํ๊ธฐ while index <= number { arr[index] = 0 // ๋ฐฐ์์ ํด๋นํ๋ ์ธ๋ฑ์ค๋ ๋ฐฐ์ด ์์ ๊ฐ์ ๋ชจ๋ 0์ผ๋ก ๋ณ๊ฒฝ index += i // ๋ค์ ๋ฐฐ์ ์ธ๋ฑ์ค ๊ตฌํ๊ธฐ } } // ์์๋ง ์ถ๋ ฅ for number in arr { if number != 0 { print(number, terminator: " ") } } } solution()์์ ๊ฐ์ด ๊ตฌํํ๋ฉด 1000๊น์ง์ ์ซ์ ์ค ์์์ธ ์ซ์๋ง ์ถ๋ ฅํ ์ ์๋ค.

๋๋ for-in stride ๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋์ ๊ฐ์ด ๊ตฌํํ ์๋ ์๋ค.
var number = 1000 // ํ๋ณํ ์ซ์์ ํฌ๊ธฐ var arr = Array(0...1000) // ํ๋ณํ ์ซ์ ํฌ๊ธฐ๋งํผ ๋ฐฐ์ด ํ ๋น. ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํด๋น ๋ฐฐ์ด์ ์์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค. func solution() { arr[1] = 0 // 1์ ์์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ์๋ for ๋ฌธ์ 2๋ถํฐ ์์ํ๋ค. // ์์ ํ๋ณ ๊ณผ์ . 2๋ถํฐ number๊น์ง ์ํํ๋ค. for i in 2...number { if arr[i] == 0 { // ์ด๋ฏธ ๋ฐฐ์ด ์์๊ฐ 0์ด๋ผ๋ฉด, ์์๊ฐ ์๋๋ผ๊ณ ํ๋จํ ๊ฒ์ด๋ฏ๋ก ์๋ ์ฝ๋ ๊ฑด๋๋ฐ๊ธฐ continue } for j in stride(from: i * 2, through: number, by: i) { arr[j] = 0 // ๋ฐฐ์์ ํด๋นํ๋ ์ธ๋ฑ์ค๋ ๋ฐฐ์ด ์์ ๊ฐ์ ๋ชจ๋ 0์ผ๋ก ๋ณ๊ฒฝ } } // ์์๋ง ์ถ๋ ฅ for number in arr { if number != 0 { print(number, terminator: " ") } } }์๋ ์ฝ๋๋ ์ด๋ฅผ C++๋ก ๊ตฌํํ ๊ฒ์ด๋ค.
์์ ํ๋ณํ๊ธฐ (C++ ์ฝ๋)
int number = 1000; int a[1001]; void solution() { for (int i = 2; i <= number; i++) { a[i] = i; } for (int i = 2; i <= number; i++) { if (a[i] == 0) continue; // ์ด๋ฏธ ํ๋ณ๋ ์ซ์๋ ๊ฑด๋๋ฐ๊ธฐ for (int j = i * 2; j <= number; j += i) { // ํน์ ์ซ์์ ๋ฐฐ์๋ถํฐ ํ๋ณํ๋ค๊ณ ํ์ํ๊ธฐ a[j] = 0; } } for (int i = 2; i <= number; i++) { if (a[i] != 0) cout << a[i] << "\n"; } } solution()'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ Level1 (Swift) (0) 2022.02.06 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค [์นด์นด์ค ์ธํด] ํคํจ๋ ๋๋ฅด๊ธฐ Level1 (Swift) (0) 2022.02.06 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์คํจ์จ Level1 (Swift) (0) 2022.02.01 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์์ ์ํธ Level 1 (Swift) (0) 2022.01.31 [Algorithm] ๋ฐฑ์ค 1157 ๋จ์ด ๊ณต๋ถ (Swift/C++) (0) 2022.01.31