Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 17087๋ฒˆ - ์ˆจ๋ฐ”๊ผญ์งˆ6 (๋ฌธ์ œ ํ’€์ด ์„ค๋ช…, GCD์•Œ๊ณ ๋ฆฌ์ฆ˜_์Šค์œ„ํ”„ํŠธ)

๊ฐ์ž ๐Ÿฅ” 2022. 2. 19. 15:52
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/17087

 

17087๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ 6

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ N๋ช…๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  S์— ์žˆ๊ณ , ๋™์ƒ์€ A1, A2, ..., AN์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑธ์–ด์„œ ์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ๋•Œ ๊ฑท๋Š”๋‹ค๋ฉด 1์ดˆ ํ›„์— X+D๋‚˜ X-D๋กœ ์ด

www.acmicpc.net

๋ฌธ์ œ๊ฐ€ ์กฐ๊ธˆ ์• ๋งคํ•˜๋‹ค. ๋„ํ†ต 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์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ธฐ์–ตํ•˜์ž.

๋ฐ˜์‘ํ˜•