https://school.programmers.co.kr/learn/courses/30/lessons/135807
코드 & 풀이
def gcd(num1, num2):
while num2:
num1, num2 = num2, num1%num2
return num1
def find_gcd(nums):
result = nums[0]
for num in nums[1:]:
result = gcd(result, num)
if result == 1:
break
return result
def can_divide(nums, gcd_value):
if gcd_value == 1:
return 0
return gcd_value if all(num % gcd_value != 0 for num in nums) else 0
def solution(arrayA, arrayB):
a_gcd = find_gcd(arrayA)
b_gcd = find_gcd(arrayB)
max_gcd_A = can_divide(arrayB, a_gcd)
max_gcd_B = can_divide(arrayA, b_gcd)
return max(max_gcd_A, max_gcd_B)
GCD
즉, 최대 공약수를 구해서
다른 리스트가 나눠지는 지 확인하기만 하면 됩니다.
가장 큰 조건인 GCD를 구하는 건
유클리는 호제법을 활용했습니다.
https://fall-in-dream.tistory.com/11
전에 자바버전으로 올린건데
참고하시면 좋을 거 같습니다.
from math import gcd
from functools import reduce
def find_gcd(nums):
return reduce(gcd, nums)
def can_divide(nums, gcd_value):
if gcd_value == 1:
return 0
return gcd_value if all(num % gcd_value != 0 for num in nums) else 0
def solution(arrayA, arrayB):
a_gcd = find_gcd(arrayA)
b_gcd = find_gcd(arrayB)
max_gcd_A = can_divide(arrayB, a_gcd)
max_gcd_B = can_divide(arrayA, b_gcd)
return max(max_gcd_A, max_gcd_B)
이번에는 라이브러리를 사용한 버전입니다.
좀 더 간단해 보이죠?
하지만 저는 저 imort를 외울 자신이 없습니다....
728x90
'프로그래머스 > Lv.2' 카테고리의 다른 글
2018 KAKAO BLIND RECRUITMENT > 파일명 정렬 - Python, 정규식 (1) | 2025.01.07 |
---|---|
미로 탈출 - Python, BFS (0) | 2024.12.29 |
시소 짝꿍 - Pyton, (0) | 2024.12.24 |
호텔 대실 - Pyton, 구현, 누적합, 스위핑(Sweeping), 힙(heap) (0) | 2024.12.22 |
124 나라의 숫자 - 구현, 수학(?) (1) | 2024.12.20 |