๊ธฐ์กด ํ์ด ๋ฐฉ์ ๋ง๊ณ , ๋ค๋ฅธ ํ์ด ๋ฐฉ์ ๋ ๊ฐ์ง๋ฅผ ๋ ๋ด๊ณ ์์ต๋๋ค. ๋๊น์ง ์ฝ์ด์ฃผ์ธ์ฉ!
๐ ๋ฌธ์
https://www.acmicpc.net/problem/1978
๐ ๋์ ํ์ด
2๋ถํฐ i-1๊น์ง ๋๋ฉด์ ๋๋จธ์ง๊ฐ 0์ผ๋ก ๋จ์ด์ง๋ ์๊ฐ ์์ผ๋ฉด flag๋ฅผ false๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
๐ ์ ๋ต์ฝ๋
private func solution() -> Int {
let n = Int(readLine()!)!
let arr = readLine()!.split(separator: " ").map { Int($0)! }
var answer = [Int]()
for i in arr {
var flag = true
if i == 1 {
continue
}
for j in 2..<i {
if i % j == 0 {
flag = false
}
}
if flag {
answer.append(i)
}
}
return answer.count
}
print(solution())
๐ ์ฌ๊ธฐ์ ์ ๊น,
๋๋ ์ฌ์ค ์ด ํ์ด๊ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ ์ค ์๊ณ ๋๋ ธ๋๋ฐ, ์๊ฐ์ด๊ณผ๊ฐ ๋์ง ์์๋ค. ๊ทธ์ด์ ๋ ์ฃผ์ด์ง๋ ์๋ค์ด 1000์ดํ์ด๊ธฐ ๋๋ฌธ! ๋ง์ฝ 100000๊น์ง ์ฃผ์ด์ง ์ ์๋ค๋ฉด, 2๋ถํฐ i-1๊น์ง ๋ชจ๋ ์๋ฅผ ์ํํ๋ ๊ฒ์, ๊ต์ฅํ ์๊ฐ์ด ์์๋ ๊ฒ์ด๋ค. ๊ทธ๋ผ ์ด๊ฒ์ ์ค์ด๊ธฐ ์ํด์๋ ์ด๋ป๊ฒํ ๊น?
๐ฌ ์ ๊ณฑ๊ทผ๊น์ง ์ดํด๋ณด๊ธฐ
10์ ์์๋ก ๋ค์ด๋ณด์.
๋ด๊ฐ ํ์ดํ ๋ฐฉ๋ฒ์, 2,3,4,5,6,7,8,9๊น์ง ๋ชจ๋ 10์ผ๋ก ๋๋ ๋ณด๊ณ , ๊ฒฐ์ ํ๋ ํ์ด๋ก ์์ฑํ๋ค. ํ์ฌ 10์ 2๋ก ๋๋์ด๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฃจํ๊ฐ ํ๋ฒ๋ง ๋๊ณ ๋๋์ง๋ง, ๋ง์ฝ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ ์ต๋ 8๋ฒ์ ๋ฃจํ๊ฐ ๋๋ค๋ ๋ง์ด๋ค. ์ด ๋ฃจํ ํ์๋ฅผ ์ต๋ํ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ์งํ์ด ๊ฐ๋ฅํ๋ค.
10์ ์ฝ์๋ 1,2,5,10 ์ด๋ ๊ฒ ๋ค๊ฐ์ด๋ค. ์ฝ์์ ํน์ง์ ๋ณด๋ฉด, ๋์นญ์ ์ด๋ฃฌ๋ค .์ฆ
1 x 10
2 x 5
5 x 2
10 x 1
์ด ๊ฒฝ์ฐ๋ฅผ ๋ณด๋ฉด, 2 ๊น์ง๋ง ํ๋ณํด๋ด
๋ฉด, ์ด ์๊ฐ ์์์ธ์ง ์๋์ง ์ ์ ์๋ค. ์ด ์ฑ์ง์ ์ด์ฉํ ๊ฒ์ด๋ค.
10์ ๋ฃจํธ๋ฅผ ์์์ ์ ๊ณฑ๊ทผ์ ๊ตฌํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ์ด ์ ๊ณฑ๊ทผ์ ์ ๋งคํ ์์๋ก ๋์ค๊ธฐ ๋๋ฌธ์, +1 ํด์ค ์๊น์ง๋ง ๊ตฌํด๋ณด์.
private func solution() -> Int {
let n = Int(readLine()!)!
let arr = readLine()!.split(separator: " ").map { Int($0)! }
var answer = [Int]()
for i in arr {
var flag = true
if i == 1 {
continue
}
for j in 2..<Int(sqrt(Double(i)))+1 {
if i % j == 0 {
flag = false
}
}
if flag {
answer.append(i)
}
}
return answer.count
}
for๋ฌธ์ ๋ณด๋ฉด, 2๋ถํฐ i๊น์ง ์ํ๋ฅผ ๋์๋ ๊ฒ์ด, Int(squart(Double(i)))+1 ๋ก ๋ฐ๊ฟ์คฌ๋ค. (sqrt๋ double๋ง ์ทจ๊ธํ๊ธฐ ๋๋ฌธ์, i๋ฅผ double๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ๋ค์ int๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ณผ์ ์ด ํ์ํ๋ค.)
์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด ๊ธฐ์กด์ ๋๋ ๋ฃจํ๊ฐ ๋ฐํ ๋ง์ด ๋์ ์๊ฐ์ด ์กฐ๊ธ ๋ ์์๋๊ฒ ์ง!
๐ฌ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด
์ด๊ฒ์ ์ด์ฉํ๋ฉด ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ์์๋ฅผ ๊ตฌํ ์ ์๋ค๊ณ ํ๋ค. ์ด๋จธ๋จธ,,, ์ด๊ฑด ๋ ๋ญ๋,,์ฐพ์๋ณด๋ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ๋ค. ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
1. ๋จผ์ ๋ฐฐ์ด์ ํ๋ณํด์ผํ๋ ์๋ค์ ๋ค ๋ฃ์ด์ค๋ค.
2. 2๋ถํฐ ์์ ์ ๋ฐฐ์๊ฐ๋๋ ์ซ์๋ค์ ๋ชจ๋ ์ง์์ค๋ค. (์์ ์ ์ ์ธ)
3. 3๋ถํฐ ์์๋์ด ๋ฐฐ์๊ฐ ๋๋ ์ซ์๋ค์ ์ง์์ค๋ค. (์์ ์ ์ ์ธ)
... ๋ฐ๋ณต
์ฌ๊ธฐ์ ๋ง์ฝ ์ด๋ฏธ ์ ์ธ๋ ์๋ผ๋ฉด, ๊ฑด๋๋ฐ์ด์ค๋ค.
๊ฐ๋จํ๋ค! 2๋ถํฐ ์ํํ๋ฉด์ ๊ทธ ์์ ๋ฐฐ์๋ค์ ์ง์์ฃผ๋ ๊ฒ์ด๋ค. 2๋ถํฐ ์์ํ๊ฒ ๋ ํ ๋ฐ, ์๊ธฐ ์์ ์ ์ ์ธํ๊ณ ์ง์์ฃผ๊ฒ ๋๋๊น, ์ ์ผ ์์ ์์ 2๋ ๊ทธ๋๋ก ๋จ๊ฒ๋๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๊ฒ ๋๋ฉด, ์ฝ์๋ฅผ ๊ฐ์ง์ง ์๋ ์๋ง ๋จ์ ๊ฒ์ด๋ค!
private func solution() -> Int {
let n = Int(readLine()!)!
let arr = readLine()!.split(separator: " ").map { Int($0)! }
var answer = [Int]()
var visited = Array(repeating: false, count: 1001)
visited[0] = true
visited[1] = true
// 1000๊น์ง ๋ฏธ๋ฆฌ ์์ ํ๋ณ
for i in 2...1000 {
if visited[i] == true {
continue
}
for j in stride(from: i+i, through: 1000, by: i) {
visited[j] = true
}
}
// flase ์ด๋ฉด ์ถ๋ ฅ
for k in arr {
if visited[k] == false {
answer.append(k)
}
}
return answer.count
}
print(solution())
๊ทผ๋ฐ,,๋๋๊ฒ๋ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด์ ์ผ๋ฐ 2๋ถํฐ i๊น์ง ๋ชจ๋ ์ํํ์๋๋ ๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ์ฐจ์ด๊ฐ ๋์ง ์์๋ค. ใ ใ ใ ใ
๊ทธ๋ผ ์ ๊ณฑ๊ทผ์ ์ด์ฉํ์๋๋?
์ค.. ์ด๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ์ด ๋๊ฑธ๋ฆฌ๋๋ฐ..? ๋ญ๋..๋ญ๋...
๐๐ปโ๏ธ ์ง๋๊ฐ๋ ๊ณ ์๋๋ค๊ป ์ง๋ฌธ
1. ์ ๊ณฑ๊ทผ์ ์ด์ฉํด์ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์๋ค๊ณ ์๊ฐํ๋๋ฐ, ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ๋์ด๋ ์ด์
2. ์๋ผํ ์คํ
๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ํจ์จ์ ์ธ ์์๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋๋ฐ, ์,,, ์ ์ฒด๋ฅผ ์ํํ๋ ๊ฒ๊ณผ ์๊ฐ๋ณต์ก๋, ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ผํ๊ฒ ๋๋์ง,,,
๊ถ๊ธํฉ๋๋ค.. ํน์ N๊ณผ ์์ ๋ฒ์๊ฐ ๋๋ฌด ์์์? ๋์ผํ๊ฒ ๋์ค๋๊ฒ์ธ๊ฐ์.? ํ ,,
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 6588๋ฒ - ๊ณจ๋๋ฐํ์ ์ถ์ธก (1) | 2022.12.27 |
---|---|
[๋ฐฑ์ค] (Swift) 1929๋ฒ - ์์์ฐพ๊ธฐ (๋ ๋ฑ์ฅํ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด) (2) | 2022.12.27 |
[๋ฐฑ์ค] (Swift) 2609๋ฒ - ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (0) | 2022.12.25 |
[๋ฐฑ์ค] (Swift) 17425๋ฒ - ์ฝ์์ ํฉ (0) | 2022.12.23 |
[๋ฐฑ์ค] (Swift) 17427๋ฒ - ์ฝ์์ ํฉ2 (0) | 2022.12.23 |