문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/135807
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
접근 방식
최대공약수를 구한 후, 상대방 배열을 나눠보면 된다.
난 내장함수에 최대공약수 구하는 것이 있을 지 모르고 쌩으로 풀었지만
보통 reduce + gcd 를 조합해서 푸는 것 같다
답
import math
def findDivisor(arr):
common_divisor = set()
min_arr = min(arr)
max_check = int(math.sqrt(min_arr))
for i in range(1,max_check+1):
if all(x % i == 0 for x in arr):
common_divisor.add(i)
if all(x % (min_arr//i) ==0 for x in arr) and (min_arr // i != i) and (min_arr // i != 1):
common_divisor.add(min_arr//i)
return sorted(common_divisor, reverse = True)
def solution(arrayA, arrayB):
arrayA = list(set(arrayA))
arrayB = list(set(arrayB))
a_common_divisor = findDivisor(arrayA)
b_common_divisor = findDivisor(arrayB)
a_max,b_max = 0,0
for i in a_common_divisor:
if all(x % i !=0 for x in arrayB):
a_max = i
break
for i in b_common_divisor:
if all(x % i !=0 for x in arrayA):
b_max = i
break
return max(a_max,b_max)
내장함수 활용
from functools import reduce
from math import gcd
def solution(nums1, nums2):
gcd1, gcd2 = reduce(gcd, nums1), reduce(gcd, nums2)
answer = []
if all(each % gcd2 for each in nums1):
answer.append(gcd2)
if all(each % gcd1 for each in nums2):
answer.append(gcd1)
return max(answer) if answer else 0
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 단어변환 - BFS, DFS 별 풀이 (0) | 2024.11.13 |
---|---|
[프로그래머스] 가장 큰수 - 퀵정렬 활용 (0) | 2024.11.04 |
[프로그래머스] 게임 맵 최단거리 - BFS (0) | 2024.10.26 |
[프로그래머스] 더 맵게 - 힙, 힙큐 (0) | 2024.10.25 |
[프로그래머스] 소수 찾기 - 에라토스테네스의 채, 재귀 (0) | 2024.10.21 |