반응형
https://school.programmers.co.kr/learn/courses/30/lessons/135807
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from math import gcd
from functools import reduce
def solution(arrayA, arrayB):
n = len(arrayA)
result = []
gcd_A = reduce(lambda x, y : gcd(x, y), arrayA, 0)
gcd_B = reduce(lambda x, y : gcd(x, y), arrayB, 0)
for i in range(n):
if arrayB[i] % gcd_A == 0:
break
else:
result.append(gcd_A)
for i in range(n):
if arrayA[i] % gcd_B == 0:
break
else:
result.append(gcd_B)
if len(result) == 0:
return 0
else:
return max(result)
저는 math
모듈의 gcd
와 functools
의 reduce
를 이용하여arrayA
와 arrayB
의 최대공약수(gcd)를 구하였습니다.
두 리스트의 최대공약수를 구함으로 철수, 영희가 가진 카드들 중 모든 숫자를 나눌 수 있는 가장 큰 양의 정수를 구하였습니다.
gcd_A
는arrayA
의 최대공약수이고arrayA
가 가진 값들 중 모든 값을 나눌 수 있는 가장 큰 값입니다.gcd_B
또한 마찬가지입니다.
위에서 구한 최대공약수를 이용하여 arrayA
와 arrayB
를 각 요소를 순차적으로 반복하는데
이때 arrayB
의 각 요소 중 gcd_A
로 나누어지는 값이 있다면 break
문을 통하여 빠져 나오게 됩니다.
이것은 철수의 최대공약수가 영희가 가진 카드들 중에 적힌 숫자들 중에서 나눌 수 있는 값이 존재한다는 의미입니다.break
문으로 반복문이 종료되지 않는다면 result
리스트에 최대공약수
를 저장해줍니다.
arrayA
의 반복도 같은 동작을 수행합니다.
모든 반복문이 종료되면 result
변수에 저장된 값이 없다면 조건에 부합하는 양의 정수가 존재하지 않는다는 의미로 0
을 반환합니다.
저장된 값이 있다면 max()
를 이용하여 result
에 저장된 값 중 최대값을 반환합니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 무인도 여행 파이썬(Python) (0) | 2023.01.30 |
---|---|
[코딩테스트] 프로그래머스 오픈채팅방 파이썬(Python) (0) | 2023.01.27 |
[코딩테스트] 프로그래머스 주식가격 파이썬(Python) (0) | 2023.01.25 |
[코딩테스트] 프로그래머스 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 MySQL (0) | 2023.01.24 |
[코딩테스트] 프로그래머스 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 MySQL (0) | 2023.01.22 |