숫자 카드 나누기
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 내 풀이
- 최대공약수(GCD)를 활용한 문제 해결 아이디어
- 배열 A 전체를 나눌 수 있는 자연수는 GCD(A)의 약수뿐이다
- GCD(A)가 배열 B의 어떤 원소도 나누지 못한다면, GCD(A)는 유효한 후보가 된다
- 반대로 GCD(B)가 배열 A의 어떤 원소도 나누지 못한다면, GCD(B)도 유효한 후보가 된다
- 두 경우 모두 확인하여 가장 큰 값을 선택하면 된다
- 시간복잡도 분석
- GCD 계산: O(N log M)
- 배수 여부 검사: O(N)
- 전체 시간복잡도: O(N log M)
- N: 배열의 길이 (최대 500,000)
- M: 배열의 원소 크기 (최대 100,000,000)
- log M은 log₂(100,000,000) ≈ 27 정도이므로
- 전체 연산량은 약 500,000 × 27 = 약 13,500,000회로 제한 내에서 충분히 처리 가능
- 최대공약수(GCD)를 활용한 문제 해결 아이디어
from math import gcd
def solution(arrayA, arrayB):
answer = 0
a,b=max(arrayA), max(arrayB)
for ar, br in zip(arrayA,arrayB):
a=gcd(a,ar)
b=gcd(b,br)
for ar, br in zip(arrayA,arrayB):
if br%a==0:
a=1
if ar%b==0:
b=1
answer=max(a,b)
if answer==1:
answer=0
return answer
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][이분탐색] 징검다리 건너기 (1) | 2025.07.05 |
|---|---|
| [프로그래머스][누적합] 연속된 부분 수열의 합 (0) | 2025.07.04 |
| [프로그래머스][누적합] 📍쿼드압축 후 개수 세기 (2) | 2025.06.24 |
| [프로그래머스][메모이제이션] 풍선 터트리기 (0) | 2025.06.19 |
| [프로그래머스][정렬] 인사고과 (0) | 2025.06.09 |