๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2824_์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

๋ฟŒ์•ผ._. 2024. 5. 14. 16:11

Silver I

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/2824)

< ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ >

 

๋ฌธ์ œ ํ’€์ด 

 

๋ชจ๋“  ์Œ์„ ๋งŒ๋“ค์–ด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class _2824_ { // ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int n = Integer.parseInt(bf.readLine());

		st = new StringTokenizer(bf.readLine());
		int narr[] = new int[n];
		for (int i = 0; i < n; i++) {
			narr[i] = Integer.parseInt(st.nextToken());
		}

		int m = Integer.parseInt(bf.readLine());

		st = new StringTokenizer(bf.readLine());
		int marr[] = new int[m];
		for (int i = 0; i < m; i++) {
			marr[i] = Integer.parseInt(st.nextToken());
		}

		long result = 1;
		boolean flag = false;
		for (int i = 0; i < n; i++) {
			if (narr[i] == 1) {
				continue;
			}
			for (int j = 0; j < m; j++) {
				if (marr[j] == 1 || narr[i] == 1) {
					continue;
				}
				int num = gcd(narr[i], marr[j]);
				result *= num;

				if (result >= 1000000000) {
					flag = true;
					result %= 1000000000;
				}

				narr[i] /= num;
				marr[j] /= num;
			}
		}

		String answer = Long.toString(result);
		if (flag) {
			for (int i = 0; i < 9 - answer.length(); i++) {
				System.out.print("0");
			}
		}
		System.out.println(answer);
	}

	private static int gcd(int a, int b) {
		if (b == 0)
			return a;
		else
			return gcd(b, a % b);
	}
}
๋ณ€์ˆ˜)
n : A์˜ ์•ฝ์ˆ˜ ๊ฐœ์ˆ˜
narr : A์˜ ์•ฝ์ˆ˜
m : B์˜ ์•ฝ์ˆ˜ ๊ฐœ์ˆ˜
marr : B์˜ ์•ฝ์ˆ˜
result, answer : ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜
flag : 1000000000์œผ๋กœ ๋‚˜๋ˆˆ ์—ฌ๋ถ€

 

A์™€ B์˜ ์•ฝ์ˆ˜ ๊ฐœ์ˆ˜์™€ ๊ฐ ์•ฝ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์Œ ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด gcd ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ด๋•Œ ๊ฐ’์ด 1์ด๋ผ๋ฉด gcd ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ ์Œ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. gcd ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์–ป์€ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ result์— ๊ณฑํ•˜๊ณ  ๊ฐ ๊ฐ’์—๋Š” ๋‚˜๋ˆˆ๋‹ค. ์ด๋•Œ result๊ฐ€ 1000000000 ์ด์ƒ์ด๋ผ๋ฉด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋ˆ„๊ณ  flag๋ฅผ true๋กœ ์ €์žฅํ•œ๋‹ค. 

 

flag๊ฐ€ true๋ผ๋ฉด 1000000000์œผ๋กœ ๋‚˜๋ˆˆ ์ ์ด ์žˆ์œผ๋ฏ€๋กœ 9์ž๋ฆฌ ์ด์ƒ์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•ž์— ๋นˆ ์ž๋ฆฟ์ˆ˜๋งŒํผ 0์œผ๋กœ ์ฑ„์šด๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ answer๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

gcd (int a, int b)

b๊ฐ€ 0์ด๋ผ๋ฉด a๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

b๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด gcd(b, a% b)๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.


์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด result ๊ฐ’์ด 1000000000 ์ด์ƒ์ผ ๋•Œ ๋‚˜๋ˆ ์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ฆฌ์ง€ ๋ชปํ–ˆ๋‹ค ๐Ÿ˜ข