๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/17087
๋ฌธ์ ๊ฐ ์กฐ๊ธ ์ ๋งคํ๋ค. ๋ํต input๊ณผ output์ ๊ด๊ณ๊ฐ ์ดํด๊ฐ ๊ฐ์ง ์์์ ๋ฌธ์ ๋ฅผ ์ดํดํ๊ธฐ ์ํด ์ธํฐ๋ท์ ์ฐพ์๋ณด์๋ค. ๊ทธ๋ ๊ฒ ์์๋ธ ์ฌ์ค์ ์๋์ ๊ฐ๋ค.
- ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๊ทธ ์ค์์๋, GCD ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ์ฌ ํธ๋ ๋ฌธ์ ์ด๋ค.
- GCD์๊ณ ๋ฆฌ์ฆ (์ ํด๋ฆฌ๋ ํธ์ ๋ฒ)์ ์ดํดํ๊ธฐ ์ํด์๋ ์ด๊ธ ์ ์ฐธ๊ณ ํ๋ค.
โถ ๊ทผ๋ฐ ๋๋์ฒด ์, ์ต๋๊ณต์ฝ์๊ฐ ํ์ํ ๊น?
์ด๋ฐ์๋ ๋จ์ํ ๋์์ด ์๋ ์์น์ ๋ด๊ฐ์๋ ์๋ฆฌ์ ์ฐจ์ด๋ฅผ ๊ตฌํ์ฌ, ์ต๋๊ฐ?์ ๊ตฌํ๋ฉด๋๋ ์ค ์์๋ค. ์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด, ์์ 1๋ฒ ๋ถํฐ output์ด ๋ง์ด ์๋๋ค. (์ธํฐ๋ท์ ์ฐพ์๋ณด๋ ๊ฑฐ์ ๋๋ถ๋ถ์ ๋ชจ๋ ์ฌ๋๋ค์ด ์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋์ง ๋ชจ๋ฅด๊ณ ์๊ณ ๋๋ ๋๊ฐ์ ๊ณ ๋ฏผ์ ๊ฑฐ์ณ๊ฐ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.)
๋ค์ํ ์ธํฐ๋ท ๊ธ์ ๋ค์ง๋ค๊ฐ ์ด๊ธ ์ ํ์๋ถ์ด ์ ํํ๊ฒ ํํํด ์ฃผ์ ๊ฒ์ ๋ณด๊ณ , ๋ฐ๋ก ๋ฌธ์ ๋ฅผ ์ดํดํ ์ ์์๋ค. ๋ฌธ์ ์์ ์ฃผ์ด์ง D ๋ ์๋น์ด์ ๋ณดํญ์ผ๋ก ๋ณด๋ฉด, ์ ์ต๋๊ณต์ฝ์๊ฐ ํ์ํ์ง ์๊ฒ ๋๋ค. ์๋ฅผ๋ค์ด ์์ 1๋ฒ์ผ๋ก ์ค๋ช ํด๋ณด๋ฉด, output์ธ 2๋ฅผ ์๋น์ด์ ๋ณดํญ์ผ๋ก ๋ณด๋ฉด, ๋์๋ค์๊ฒ ๋ชจ๋ ์ฐพ์๊ฐ ์ ์๋ค.
1 ใ 3 ใ ใ ใ 7 ใ ใ ใ 11
์ด๋ ๊ฒ ๋ณด๋ฉด, 3๋ฒ๋ ธ๋์์์น์ ์๋ ์๋น์ด๋, ๋ณดํญ2๋ก 1๋ฒ๋์, ๋ณดํญ2 * 2 ๋ก 7๋ฒ๊น์ง, ๋ 11๋ฒ๊น์ง ๋ณดํญ2 * 4 ๋ก ๊ฐ ์์๋ค. ์ด ๊ฐ์ D ๋ผ๊ณ ์ถ๋ ฅํด๋ฌ๋ผ๋ ๊ฒ์ด๋ค.
์ด ํ์ด๋๋ก๋ณด๋ฉด, ์๋น์ด์ ๋์๋ค์ ์์น์ ์ฐจ๋ฅผ ๋ชจ๋ ๊ตฌํ ๋ค, ๊ตฌํด์ง ๊ฐ๋ค์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ฉด, ์ต๋๋ณดํญ D๊ฐ ๋์จ๋ค๋ ๊ฒ์ด๋ค. ๋ญ๋ฐ ์ด๋ ๊ฒ ๋ฌธ์ ๊ฐ ์ ๋งค๋ชจํธํ๊ฒ ์ค๋ช
ํด๋จ๋... ํ..
๋ด๊ฐ ํผ ํ์ด(1) - ์๊ฐ ์ด๊ณผ
์๊ฐ ์ด๊ณผ๊ฐ ๋ณ๋ค. ์๋ฌด๋๋ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ฌ์ผํ ๊ฒ ๊ฐ๋ค.
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
var bro = readLine()!.split(separator: " ").map { Int(String($0))! }
var distance: [Int] = []
func gcd(_ m: Int, _ n: Int) -> Int {
if n == 0 {
return m
} else if m % n == 0 {
return n
} else {
return gcd(n, m%n)
}
}
for b in bro {
distance.append(abs(input[1]-b))
distance.sort(by: >)
}
var ans = distance[0]
for i in 1..<distance.count {
ans = gcd(ans, distance[i])
}
print(ans)
๋ด๊ฐ ํผ ํ์ด(2) - ๋ง์์ต๋๋ค!
์ค๊ฐ์ bro ๋ฐฐ์ด์ ํ๋ฒ sort ํด์ฃผ์๋ ๊ฒ์ ์ง์ฐ๊ณ , ๋ง์ง๋ง์ for ๋ฌธ์ ํ์ฉํ์ฌ ํฐ์ง ์์์ง ํ๋ฒ ํ์ธํด์ฃผ๋ ๊ณผ์ ์ ์ถ๊ฐํ๋ค. sort ๋ฉ์๋๊ฐ ์๋ฌด๋๋ O(nlogn) ์ ๊ฐ์ง๊ณ ์๊ณ , ๋ฐฐ์ด์ ๊ธธ์ด์ ๋ฐ๋ผ ์ ์ ๋ ๊ธธ์ด์ง๋ฏ๋ก, ํ ์คํธ์ผ์ด์ค๋ฅผ ํต๊ณผ์ํฌ๋ ์๋ฌด๋๋ ์๊ฐ ์ด๊ณผ๊ฐ ์๊ธด ๊ฒ ๊ฐ์๋ค.
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
var bro = readLine()!.split(separator: " ").map { Int(String($0))! }
var distance: [Int] = []
func gcd(_ m: Int, _ n: Int) -> Int {
if n == 0 {
return m
} else if m % n == 0 {
return n
} else {
return gcd(n, m%n)
}
}
for b in bro {
distance.append(abs(input[1]-b))
}
var ans = distance[0]
for i in 1..<distance.count {
if ans < distance[i] {
ans = gcd(distance[i], ans)
} else {
ans = gcd(ans, distance[i])
}
}
print(ans)
๋ค์ํ ์ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ๊ฐ๋ ๊ณต๋ถ๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค. ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ธ๊ฑธ ์์ง๋ง, gcd ์๊ณ ๋ฆฌ์ฆ์ ๋ชฐ๋ผ์ ์ธํฐ๋ท์ ์ฐพ์๋ณด๊ณ ํ์๋ค. ์ฌ๊ท๋ฅผ ํ์ฉํ gcd์๊ณ ๋ฆฌ์ฆ, ๊ธฐ์ตํ์.
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 1737๋ฒ - 2์ง์ 8์ง์ (0) | 2022.02.20 |
---|---|
[๋ฐฑ์ค] (Swift) 9613๋ฒ - GCDํฉ (0) | 2022.02.20 |
[๋ฐฑ์ค] (Swift) 11656๋ฒ - ์ ๋ฏธ์ฌ ๋ฐฐ์ด (0) | 2022.02.19 |
[๋ฐฑ์ค] (Swift) 10824๋ฒ - ๋ค ์ (0) | 2022.02.18 |
[๋ฐฑ์ค] (Swift) 11655๋ฒ - ROT13 (0) | 2022.02.17 |