[Algorithm] ์์ ์ฐพ๊ธฐ (์๋ผํ ์คํ ๋ค์ค์ ์ฒด)
๐ฅ ๋ฌธ์
1๋ถํฐ ์ ๋ ฅ๋ฐ์ ์ซ์ n ์ฌ์ด์ ์๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ํจ์, solution์ ๋ง๋ค์ด ๋ณด์ธ์.
๐ค ํ์ด ๋ฐฉ๋ฒ
์๋ผํ ์คํ ๋ค์ค์ ์ฒด
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ ๊ณ ๋ ๊ทธ๋ฆฌ์ค ์ํ์ ์๋ผํ ์คํ ๋ค์ค๊ฐ ๋ฐ๊ฒฌํ ์์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค.
1๋ถํฐ ์ซ์ n ์ฌ์ด์ ์์๋ฅผ ๊ตฌํ๊ณ ์ ํ ๋,
- 0๋ถํฐ n๊น์ง์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ์ด๋ฅผ ๋ชจ๋ 1๋ก ์ด๊ธฐํํ๋ค.
- 0๊ณผ 1์ ์์๊ฐ ์๋๋ฏ๋ก 0์ผ๋ก ๋ฐ๊พธ์ด์ค๋ค.
- 2๋ ์์์ด๋ฏ๋ก, 2๋ฅผ ์ ์ธํ 2์ ๋ฐฐ์๋ฅผ ๋ชจ๋ 0์ผ๋ก ๋ฐ๊พธ์ด์ค๋ค.
- 3์ ์์์ด๋ฏ๋ก, 3์ ์ ์ธํ 3์ ๋ฐฐ์๋ฅผ ๋ชจ๋ 0์ผ๋ก ๋ฐ๊พธ์ด์ค๋ค.
- 5๋ ์์์ด๋ฏ๋ก, 5๋ฅผ ์ ์ธํ 5์ ๋ฐฐ์๋ฅผ ๋ชจ๋ 0์ผ๋ก ๋ฐ๊พธ์ด์ค๋ค.
- 7์ ์์์ด๋ฏ๋ก, 7์ ์ ์ธํ 7์ ๋ฐฐ์๋ฅผ ๋ชจ๋ 0์ผ๋ก ๋ฐ๊พธ์ด์ค๋ค.
- n์ ์ ๊ณฑ๊ทผ๊น์ง ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋ชจ๋ ์์๋ง 1๋ก ๋จ๋๋ค.
์์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ, 11^2 > 120์ด๋ฏ๋ก 11๋ณด๋ค ์์ ์์ ๋ฐฐ์๋ค๋ง ๋ฐ๊พธ์ด์ฃผ๋ฉด ์ถฉ๋ถํ๋ค.
์ฆ, 120๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๊ฐ์ด๋ฐ 2, 3, 5, 7์ ๋ฐฐ์๋ฅผ ์ง์ฐ๊ณ 1๋ก ๋จ๋ ๋ชจ๋ ์๋ ์์์ด๋ค.
์ฝ๋ ์ค๋ช
Int(Double(n).squareRoot())
- n์ ์ ๊ณฑ๊ทผ์ ๊ตฌํ๋ค.
์ด๋,squareRoot()
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์Double
ํ ์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ ๋ณํ์ ํด์ฃผ์๋ค.
๐ฉ๐ป๐ป Swift Code
func solution(_ n:Int) -> Int {
var sqrtN = Int(Double(n).squareRoot())
var eratos = Array(repeating: 1, count: n + 1)
var answer = 0
eratos[0] = 0
eratos[1] = 0
for i in 0...sqrtN {
if eratos[i] == 1 {
var j = i * 2
while j <= n {
eratos[j] = 0
j += i
}
}
}
for n in eratos {
if n == 1 {
answer += 1
}
}
return answer
}
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์์ ์ฐพ๊ธฐ
1๋ถํฐ ์ ๋ ฅ๋ฐ์ ์ซ์ n ์ฌ์ด์ ์๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ํจ์, solution์ ๋ง๋ค์ด ๋ณด์ธ์. ์์๋ 1๊ณผ ์๊ธฐ ์์ ์ผ๋ก๋ง ๋๋์ด์ง๋ ์๋ฅผ ์๋ฏธํฉ๋๋ค. (1์ ์์๊ฐ ์๋๋๋ค.) ์ ํ ์กฐ๊ฑด n์ 2์ด์
programmers.co.kr