백준

[백준] 2824번 최대공약수_python

미스터 한뺑 2023. 4. 24. 21:25
반응형

1. 문제

상근이는 학생들에게 두 양의 정수 A와 B의 최대공약수를 계산하는 문제를 내주었다. 그런데, 상근이는 학생들을 골탕 먹이기 위해 매우 큰 A와 B를 주었다.

상근이는 N개의 수와 M개의 수를 주었고, N개의 수를 모두 곱하면 A, M개의 수를 모두 곱하면 B가 된다.

이 수가 주어졌을 때 , 최대공약수를 구하는 프로그램을 작성하시오

 

2. 입력

첫째 줄에 N(1 ≤ N ≤ 1000)이 주어진다. 둘째 줄에는 N개의 양의 정수가 공백으로 구분되어 주어진다. 이 수는 모두 1,000,000,000보다 작고, N개의 수를 곱하면 A가 된다.

셋째 줄에 M(1 ≤ M ≤ 1000)이 주어진다. 넷째 줄에는 M개의 양의 정수가 공백으로 구분되어 주어진다. 이 수는 모두 1,000,000,000보다 작고, M개의 수를 곱하면 B가 된다.

 

3. 출력

두 수의 최대공약수를 출력한다. 만약, 9자리보다 길다면, 마지막 9자리만 출력한다. (최대 공약수가 1000012028인 경우에는 000012028을 출력해야 한다)

 

예제 입력 1 복사

3
2 3 5
2
4 5

예제 출력 1 복사

10

예제 입력 2 복사

4
6 2 3 4
1
1

예제 출력 2 복사

1

예제 입력 3 복사

3
358572 83391967 82
3
50229961 1091444 8863

예제 출력 3 복사

출처

000012028

3. 문제 해결 

 

import math 

a = int(input())
b = map(int,input().split())
N = math.prod(b) 

c = int(input())
d = map(int,input().split())
M = math.prod(d)

print((str(math.gcd(N,M))[-9:]))

파이썬의 math 라이브러리를 이용하여 문제를 풀었다. 문제를 풀어봤던 것 중에 최대공약수 문제를 풀어봤었는데 푸는 방식을 같았으나 마지막에서 차이가 있었다. 9자리보다 길면 9자리까지만 출력을 해야 한다는 점이다. 

여기서 고민을 하다가 정수를 문자열로 바꿔서 슬라이싱을 해줬다. 정수가 아니라서 틀렸나 싶었는데 다행히 정답이었다.

 

 

반응형