Python/Programmers
[프로그래머스] 숫자 카드 나누기 LV2
Magin
2023. 8. 8. 22:46
728x90
문제)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘)
1. 각 리스트의 최대 공약수를 구하기(math.gcd 함수)
2. 각각 구한 최대 공약수로 서로의 숫자카드를 나눠 조건에 해당하는지 판단
3. 조건에 만족시 가장 큰 수 max 출력 그 외 0 출력
* 유클리디안 알고리즘(최대 공약수 구하기)
- 두 수 U, V가 있을 때 (U > V) 최대 공약수 구하기
- U - V와 V의 최대 공약수는 동일하며 해당 과정을 통해 U와 0이 될 때 최대공약수는 U가 된다.
1. U < V 라면 두수 U, V를 바꾼다.
2. U = U - V
3. U가 0이 될 때까지 반복 (그러나 1이 출력 될때는 최대 공약수는 X)
똑같은 개념이지만 나머지를 사용하는 방법
1. U < V 라면 두수 U, V를 바꾼다.
2. U = U % V
3. U가 0이 될 때까지 반복 (그러나 1이 출력 될때는 최대 공약수는 X)
코드)
import math
def solution(arrayA, arrayB):
answer = 0
a, b = 0, 0
for i in range(len(arrayA)):
a = math.gcd(a, arrayA[i])
for j in range(len(arrayB)):
b = math.gcd(b, arrayB[j])
for z in range(len(arrayA)):
if arrayA[z] % b == 0:
b = 1
if arrayB[z] % a == 0:
a = 1
if a == 1 and b ==1:
return 0
else:
return max(a,b)
728x90