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