๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 9613๋ฒˆ GCD ํ•ฉ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 4.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 9613๋ฒˆ GCD ํ•ฉ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

ํ•ด๊ฒฐ๋ฒ•

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ „ํ˜•์ ์ธ GCD ๋ฌธ์ œ์˜€๋‹ค.

 

์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์—๊ฒ ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๊ฒ ์ง€๋งŒ, ์œ ํด๋ฆฌ๋“œ GCD ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ์ž…๋ ฅ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ๋” ์–ด๋ ค์› ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

๋งŒ์•ฝ ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•œ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜์—์„œ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์„ ์ ๊ทน ์ถ”์ฒœํ•œ๋‹ค.

์ ‘๊ทผ๋ฒ•

๋ฐฐ์—ด์ด ์ฃผ์–ด์ง„๋‹ค๋ฉด, 2์ค‘ for ๋ฌธ์„ ํ†ตํ•ด์„œ ๊ฐ๊ฐ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” gcd๋ฅผ ๋ชจ๋‘ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ์ด ํ•˜๋‚˜ ์žˆ๋‹ค.

 

์•„๋งˆ ์ด ๋ฌธ์ œ๊ฐ€ ์ •๋‹ต๋ฅ ์ด 30%์ธ ์ด์œ ๋Š” ์ถœ๋ ฅ ์ž๋ฃŒํ˜•์„ ํ™•์ธํ•˜์ง€ ์•Š์•„์„œ ์ผ๊ฒƒ ๊ฐ™๋‹ค.

์ฃผ์˜ํ•˜์ž

์šฐ์„  ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋จผ์ € ๋ด๋ณด์ž.

 

  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ตœ์•…์˜ ๊ฒฝ์šฐ 100๊ฐœ
  • tc ์•ˆ์— GCD ์Œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ์•ฝ์˜ ๊ฒฝ์šฐ 100๊ฐœ
  • ํ•œ ์›์†Œ๋Š” ์ตœ๋Œ€ 1,000,000 ๊นŒ์ง€.

์šฐ์„  ์ž…๋ ฅ n์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” 10,000 ๋ฒˆ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ์ปค๋ฒ„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด๋“ค์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋กœ 100๊ฐœ์˜ ์›์†Œ๊ฐ€ ๋ชจ๋‘ 1,000,000 ์–ธ์ €๋ฆฌ์˜ ์ˆ˜๋ผ๋ฉด?

 

100๊ฐœ์˜ ์›์†Œ๋Š” 2๊ฐœ์˜ ์กฐํ•ฉ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ 100 C 2 ์— 100๋งŒ์ด๋ผ๋ฉด 49.5์–ต์ด๋ผ๋Š” ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฏ€๋กœ int ์ตœ๋Œ€ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•œ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ๋กœ ์ถœ๋ ฅํ•  ๊ฐ’์˜ ์ž๋ฃŒํ˜•์„ long์œผ๋กœ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค.

์ •๋‹ต ์ฝ”๋“œ

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int t = Integer.parseInt(br.readLine());

        while(t-- > 0) {
            String[] inputs = br.readLine().split(" ");

            int n = Integer.parseInt(inputs[0]);

            int[] arr = new int[n];
            long answer = 0;

            for(int i = 0; i < arr.length; i++) {
                arr[i] = Integer.parseInt(inputs[i + 1]);
            }

            for(int i = 0; i < arr.length-1; i++) {
                for (int j = i + 1; j < arr.length; j++) {
                    answer += gcd(arr[i], arr[j]);
                }
            }
            bw.write(answer + "\n");

        }
        bw.flush();
        bw.close();
    }

    private static int gcd(int a, int b) {
        while(b > 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }
}

๋ฌธ์ œ ํšŒ๊ณ 

์ด์ค‘ for ๋ฌธ์„ ๋งŒ๋“œ๋Š”๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ ๋ฌธ์ œ์ด๋‹ค.
์ž…๋ ฅ n ํฌ๊ธฐ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋ผ์ธ์„ ๋ฐฐ์—ด ๊ฐ’์œผ๋กœ ์ง€์ •ํ•˜๋Š”๋ฐ ๊ณ„์† ๋†“์ณค๋‹ค.
๊ฑฐ๊ธฐ๋‹ค gcd ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด์—์„œ๋„ b = a % b๋ฅผ ํ•ด์•ผํ•  ๊ฒƒ์„ ๊ณ„์† a = a % b๋ผ ํ•ด์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€