본문 바로가기

Coding test

99클럽 코테 스터디 2일차 TIL, 프로그래머스/숫자 카드 나누기도움말

🔑 오늘의 학습 키워드 : 내장 함수

import math
from functools import reduce

def solution(arrayA, arrayB):
    answer = 0
    gcdA = reduce(math.gcd, arrayA)
    gcdB = reduce(math.gcd, arrayB)
    
    if gcdA != 1 and all(b % gcdA !=0 for b in arrayB) and gcdA >= answer: answer = gcdA
    if gcdB != 1 and all(a % gcdB !=0 for a in arrayA) and gcdB >= answer: answer = gcdB

    return answer

 


🗒️ 공부한 내용 본인의 언어로 정리하기

문제를 읽고 접근 방법은 한 배열의 최대공약수를 구해서 그 숫자로 다른 배열을 나누어 확인하면 되겠다고 생각을 했다.

 

구현 단계에서 파이썬 내장 함수를 사용해서 구해보기로 했다.

 

GCD

최대 공약수를 구해주는 함수는 아래와 같은데 

import math
# 최대 공약수 구해주는 함수
math.gcd()

 

프로그래머스의 컴파일러 버전은 3.8.5 버전이었다.

 

math.gcd(*integers)

Return the greatest common divisor of the specified integer arguments. If any of the arguments is nonzero, then the returned value is the largest positive integer that is a divisor of all arguments. If all arguments are zero, then the returned value is 0. gcd() without arguments returns 0.

New in version 3.5.

Changed in version 3.9: Added support for an arbitrary number of arguments. Formerly, only two arguments were supported.

파이썬 버전 3.9 부터 인자값 여러개를 넣어서 구할 수 있도록 바뀌었다.

 

Reduce

따라서 현재 버전에서는 2개의 인수를 가지고 구해나가는 방식으로 구현을 했어야 하는데

 

재귀로 구현할 수 있었겠지만 Javascript에서 reduce함수를 쓸 수 있듯 파이썬에서도 사용할 수 있다.

from functools import reduce
# 연산을 누적해서 적용해주는 함수
reduce(math.gcd, arrayA)

 

이 함수를 사용하면 인자2에 있는 array를 인자1에 있는 함수를 적용시켜 누적 계산을 할 수 있다.

 

그렇게 최대 공약수를 구할 수 있었다.

 

All

배열 내의 값이 모두 조건을 만족하는지를 판단할 수 있는 함수이다.

 

이 내장함수를 사용하지 않았더라면

# 예시
flag = False
for a in arrayA:
	if a % gcdB != 0:
    	flag = True
if flag : answer = gcdB

 

이런 식으로 길게 사용했어야 했을 것이다.

 

all()함수를 사용해서 배열내의 인자가 전부 조건을 만족하는지 bool 값을 구할 수 있었다.

all(b % gcdA !=0 for b in arrayB)


✅ 오늘의 회고

내장함수를 많이 알아두는것이 코테 풀때 유리하다고 생각이 들었다.

 

하지만 컴파일러 버전에 따른 차이점도 발생하기 때문에

 

기본적으로 구현하는 방법은 알고 있어야 한다고 생각한다.

 



#99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL