๐Ÿ’  BOJ

[BOJ][C++] ๋ฐฑ์ค€ 1485๋ฒˆ: ๊ฐ€๋กœ์ˆ˜

์„ ๋‹ฌ 2024. 3. 13. 03:10
๋ฐ˜์‘ํ˜•

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

 

2485๋ฒˆ: ๊ฐ€๋กœ์ˆ˜

์ฒซ์งธ ์ค„์—๋Š” ์ด๋ฏธ ์‹ฌ์–ด์ ธ ์žˆ๋Š” ๊ฐ€๋กœ์ˆ˜์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋‚˜์˜ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค(3 ≤ N ≤ 100,000). ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ค„๋งˆ๋‹ค ์‹ฌ์–ด์ ธ ์žˆ๋Š” ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๊ฐ€ ์–‘์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ€

www.acmicpc.net

 

๋ฌธ์ œ

์ง์„ ์œผ๋กœ ๋˜์–ด์žˆ๋Š” ๋„๋กœ์˜ ํ•œ ํŽธ์— ๊ฐ€๋กœ์ˆ˜๊ฐ€ ์ž„์˜์˜ ๊ฐ„๊ฒฉ์œผ๋กœ ์‹ฌ์–ด์ ธ์žˆ๋‹ค. KOI ์‹œ์—์„œ๋Š” ๊ฐ€๋กœ์ˆ˜๋“ค์ด ๋ชจ๋‘ ๊ฐ™์€ ๊ฐ„๊ฒฉ์ด ๋˜๋„๋ก ๊ฐ€๋กœ์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ์‹ฌ๋Š” ์‚ฌ์—…์„ ์ถ”์ง„ํ•˜๊ณ  ์žˆ๋‹ค. KOI ์‹œ์—์„œ๋Š” ์˜ˆ์‚ฐ๋ฌธ์ œ๋กœ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ€์žฅ ์ ์€ ์ˆ˜์˜ ๋‚˜๋ฌด๋ฅผ ์‹ฌ๊ณ  ์‹ถ๋‹ค.

ํŽธ์˜์ƒ ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๋Š” ๊ธฐ์ค€์ ์œผ๋กœ ๋ถ€ํ„ฐ ๋–จ์–ด์ ธ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๋Š” ๋ชจ๋‘ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ€๋กœ์ˆ˜๊ฐ€ (1, 3, 7, 13)์˜ ์œ„์น˜์— ์žˆ๋‹ค๋ฉด (5, 9, 11)์˜ ์œ„์น˜์— ๊ฐ€๋กœ์ˆ˜๋ฅผ ๋” ์‹ฌ์œผ๋ฉด ๋ชจ๋“  ๊ฐ€๋กœ์ˆ˜๋“ค์˜ ๊ฐ„๊ฒฉ์ด ๊ฐ™๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ, ๊ฐ€๋กœ์ˆ˜๊ฐ€ (2, 6, 12, 18)์— ์žˆ๋‹ค๋ฉด (4, 8, 10, 14, 16)์— ๊ฐ€๋กœ์ˆ˜๋ฅผ ๋” ์‹ฌ์–ด์•ผ ํ•œ๋‹ค.

์‹ฌ์–ด์ ธ ์žˆ๋Š” ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ๊ฐ€๋กœ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฐ„๊ฒฉ์ด ๋˜๋„๋ก ์ƒˆ๋กœ ์‹ฌ์–ด์•ผ ํ•˜๋Š” ๊ฐ€๋กœ์ˆ˜์˜ ์ตœ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ๋‹จ, ์ถ”๊ฐ€๋˜๋Š” ๋‚˜๋ฌด๋Š” ๊ธฐ์กด์˜ ๋‚˜๋ฌด๋“ค ์‚ฌ์ด์—๋งŒ ์‹ฌ์„ ์ˆ˜ ์žˆ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ด๋ฏธ ์‹ฌ์–ด์ ธ ์žˆ๋Š” ๊ฐ€๋กœ์ˆ˜์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋‚˜์˜ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค(3 ≤ N ≤ 100,000). ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ค„๋งˆ๋‹ค ์‹ฌ์–ด์ ธ ์žˆ๋Š” ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๊ฐ€ ์–‘์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋Š” 1,000,000,000 ์ดํ•˜์ด๋‹ค. ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๊ณ , N๊ฐœ์˜ ๊ฐ€๋กœ์ˆ˜๋Š” ๊ธฐ์ค€์ ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์šด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๋ชจ๋“  ๊ฐ€๋กœ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฐ„๊ฒฉ์ด ๋˜๋„๋ก ์ƒˆ๋กœ ์‹ฌ์–ด์•ผ ํ•˜๋Š” ๊ฐ€๋กœ์ˆ˜์˜ ์ตœ์†Œ์ˆ˜๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์ž…๋ ฅ ๋ฐ›์€ ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๋“ค์˜ ์‚ฌ์ด ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•œ๋‹ค

์˜ˆ๋ฅผ๋“ค์–ด ๊ฐ€๋กœ์ˆ˜์˜ ์œ„์น˜๊ฐ€ 1,3,7,13 ์ด ์ฃผ์–ด์ง€๋ฉด

๋ฒกํ„ฐ์—๋Š” 2,4,6 ์ด ์ €์žฅ๋˜๋Š” ํ˜•ํƒœ (๊ฐ๊ฐ 3-1, 7-3, 13-7)

 

(1)

๋ฒกํ„ฐ์— ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜๋“ค์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค

gcd ํ•จ์ˆ˜๋Š” ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค.

์ด๋•Œ, a>b๋ฅผ ํ™•์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ˆœ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ง€์ •ํ•ด์ฃผ๋„๋ก ํ–ˆ๋‹ค

 

(2)

๋ฒกํ„ฐ์— ์žˆ๋Š” ์ˆ˜ / ๋ฐฉ๊ธˆ ๊ตฌํ•œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ = ํ•ด๋‹น ๊ฑฐ๋ฆฌ์— ์‹ฌ์–ด์ ธ์•ผ ํ•  ๊ฐ€๋กœ์ˆ˜์˜ ๊ฐฏ์ˆ˜ +1 ์ด๋‹ค

์˜ˆ๋ฅผ๋“ค์–ด ์œ„ ์˜ˆ์ œ์—์„œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 2๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ,

1๊ณผ 3 ์‚ฌ์ด๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ 2 ์ด๋ฏ€๋กœ 2/2=1 -> ์‚ฌ์ด์— 0๊ฐœ ์‹ฌ์Œ

3๊ณผ 7 ์‚ฌ์ด๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ 4 ์ด๋ฏ€๋กœ 4/2=2 -> ์‚ฌ์ด์— 1๊ฐœ ์‹ฌ์Œ (5 ์œ„์น˜)

7๊ณผ 13 ์‚ฌ์ด๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ 6 ์ด๋ฏ€๋กœ 6/2=3 -> ์‚ฌ์ด์— 2๊ฐœ ์‹ฌ์Œ (9, 11 ์œ„์น˜)

 

์ด์ œ ๊ทธ ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ๋ !

 

์ฝ”๋“œ

#include <iostream>
#include <vector>

using namespace std;

// Greatest Common Divisor : ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜
int gcd(int a, int b) {
    if(a<b) { 
        int tmp = a;
        a = b;
        b = tmp;
    } // a์™€ b ์ˆœ์„œ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ๊ฐ€๋Šฅ
    
    if(a%b != 0) {
        return gcd(b, a%b);
    }
    return b;
}

int main() {
    int n, before, cur;
    cin >> n;
    vector<int> v(n-1);
    cin >> before;
    for(int i=0; i<n-1; i++) {
        cin >> cur;
        v[i] = cur-before;
        before = cur;
    }

// (1)
    int totalGcd = v[0];
    for(int i=1; i<v.size(); i++) {
        totalGcd = gcd(v[i], totalGcd);
    }

// (2)
    int ans = 0;
    for(int i=0; i<v.size(); i++) {
        ans += v[i]/totalGcd - 1;
    }
    
    cout << ans;

    return 0;
}

 

 

 

๋ฐ˜์‘ํ˜•