๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/135807
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ์ด
1. ์ฒ ์๊ฐ ๊ฐ์ง ์นด๋๋ค์ ์ ํ ๋ชจ๋ ์ซ์๋ฅผ ๋๋ ์ ์๊ณ ์ํฌ๊ฐ ๊ฐ์ง ์นด๋๋ค์ ์ ํ ๋ชจ๋ ์ซ์๋ค ์ค ํ๋๋ ๋๋ ์ ์๋ ์์ ์ ์ a
2. ์ํฌ๊ฐ ๊ฐ์ง ์นด๋๋ค์ ์ ํ ๋ชจ๋ ์ซ์๋ฅผ ๋๋ ์ ์๊ณ , ์ฒ ์๊ฐ ๊ฐ์ง ์นด๋๋ค์ ์ ํ ๋ชจ๋ ์ซ์๋ค ์ค ํ๋๋ ๋๋ ์ ์๋ ์์ ์ ์ a
์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ์ค ๊ฐ์ฅ ํฐ ์์ ์ ์๋ฅผ ๋ฐํํด์ผํ๋ค.
def solution(arrayA, arrayB):
def gcd(num1, num2):
if not num2:
return num1
return gcd(num2, num1 % num2)
def take_gcd(array):
ret = array[0]
for i in range(1, len(array)):
ret = gcd(ret, array[i])
return ret
def check_condition(gcd_ret, array):
for num in array:
if not num % gcd_ret:
return False
return True
a, b = take_gcd(arrayA), take_gcd(arrayB)
checked_a, checked_b = check_condition(a, arrayB), check_condition(b, arrayA)
return max((checked_a * a), (checked_b * b))
gcd: ๋ ์์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ํจ์take_gcd: ๋ฆฌ์คํธ์ ๊ฐ ์์๋ค์gcdํจ์์ ๋ฃ์ด ๋ฆฌ์คํธ ์ ์ฒด์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ํจ์check_condition: ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ๋จํ๋ ํจ์
์ฒ ์๊ตฐ์ ์ํฌ์์ด ์นด๋๋ฅผ ๊ผญ ๋๊ฐ์ฉ๋ง ๊ฐ์ง๋ ๊ฑด ์๋๊ธฐ๋๋ฌธ์, take_gcd๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์คฌ๋ค.
๋จผ์ ๋ฆฌ์คํธ A, B์ ์ต๋๊ณต์ฝ์๋ฅผ take_gcd๋ฅผ ํตํด ๊ตฌํ๋ค a, b์ ํ ๋นํ๋ค.
๊ทธ ๋ค์ check_condition์ผ๋ก ์กฐ๊ฑด์ ๋ถํฉํ๋์ง ํ์ธํด๋ณธ๋ค.
๊ฒฝ์ฐ์ ๋ฐ๋ผ์ A, B ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํ ์ ์์ผ๋ฏ๋ก, ๋ง์ง๋ง์ ๋ ์ค ๋ ํฐ๊ฐ์ ํ์ธํด์ ๋ฐํํด์ผํ๋ค.check_condition์ผ๋ก ์กฐ๊ฑด์ ๋ถํฉํ๋ฉด True, ๋ถํฉํ์ง ์์ผ๋ฉด False๋ฅผ ๋ฐํํ๊ฒ๋๋ค.
์ฆ True๋ฉด 1, False๋ฉด 0์ ๋ฐํํ๋์
์ด๋ฏ๋ก max()์ ์ฌ์ฉํด์คฌ๋ค.
์ด๋ฌ๋ฉด A, B๊ฐ 1)๋ ๋ค ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์๋, 2)๋ ์ค ํ๋๋ง ์กฐ๊ฑด์ ํต๊ณผํ ๋, 3)๋ ๋ค ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ๋ฅผ ํ๊บผ๋ฒ์ ๊ณ ๋ คํ ์ ์๋ค.