250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (숫자 μΉ΄λ“œ λ‚˜λˆ„κΈ°) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (숫자 μΉ΄λ“œ λ‚˜λˆ„κΈ°)

γ…… γ…œ γ…” γ…‡ 2022. 12. 20. 15:18
728x90

1. 문제 μ„€λͺ…

μ² μˆ˜μ™€ μ˜ν¬λŠ” μ„ μƒλ‹˜μœΌλ‘œλΆ€ν„° μˆ«μžκ°€ ν•˜λ‚˜μ”© 적힌 μΉ΄λ“œλ“€μ„ μ ˆλ°˜μ”© λ‚˜λˆ μ„œ 가진 ν›„, λ‹€μŒ 두 쑰건 쀑 ν•˜λ‚˜λ₯Ό λ§Œμ‘±ν•˜λŠ” κ°€μž₯ 큰 μ–‘μ˜ μ •μˆ˜ a의 값을 κ΅¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

  1. μ² μˆ˜κ°€ 가진 μΉ΄λ“œλ“€μ— 적힌 λͺ¨λ“  숫자λ₯Ό λ‚˜λˆŒ 수 있고 μ˜ν¬κ°€ 가진 μΉ΄λ“œλ“€μ— 적힌 λͺ¨λ“  μˆ«μžλ“€ 쀑 ν•˜λ‚˜λ„ λ‚˜λˆŒ 수 μ—†λŠ” μ–‘μ˜ μ •μˆ˜ a
  2. μ˜ν¬κ°€ 가진 μΉ΄λ“œλ“€μ— 적힌 λͺ¨λ“  숫자λ₯Ό λ‚˜λˆŒ 수 있고, μ² μˆ˜κ°€ 가진 μΉ΄λ“œλ“€μ— 적힌 λͺ¨λ“  μˆ«μžλ“€ 쀑 ν•˜λ‚˜λ„ λ‚˜λˆŒ 수 μ—†λŠ” μ–‘μ˜ μ •μˆ˜ a

예λ₯Ό λ“€μ–΄, μΉ΄λ“œλ“€μ— 10, 5, 20, 17이 μ ν˜€ μžˆλŠ” κ²½μš°μ— λŒ€ν•΄ 생각해 λ΄…μ‹œλ‹€. λ§Œμ•½, μ² μˆ˜κ°€ [10, 17]이 적힌 μΉ΄λ“œλ₯Ό κ°–κ³ , μ˜ν¬κ°€ [5, 20]이 적힌 μΉ΄λ“œλ₯Ό κ°–λŠ”λ‹€λ©΄ 두 쑰건 쀑 ν•˜λ‚˜λ₯Ό λ§Œμ‘±ν•˜λŠ” μ–‘μ˜ μ •μˆ˜ aλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, μ² μˆ˜κ°€ [10, 20]이 적힌 μΉ΄λ“œλ₯Ό κ°–κ³ , μ˜ν¬κ°€ [5, 17]이 적힌 μΉ΄λ“œλ₯Ό κ°–λŠ”λ‹€λ©΄, μ² μˆ˜κ°€ 가진 μΉ΄λ“œλ“€μ˜ μˆ«μžλŠ” λͺ¨λ‘ 10으둜 λ‚˜λˆŒ 수 있고, μ˜ν¬κ°€ 가진 μΉ΄λ“œλ“€μ˜ μˆ«μžλŠ” λͺ¨λ‘ 10으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ² μˆ˜μ™€ μ˜ν¬λŠ” 각각 [10, 20]이 적힌 μΉ΄λ“œ, [5, 17]이 적힌 μΉ΄λ“œλ‘œ λ‚˜λˆ  κ°€μ‘Œλ‹€λ©΄ 쑰건에 ν•΄λ‹Ήν•˜λŠ” μ–‘μ˜ μ •μˆ˜ aλŠ” 10이 λ©λ‹ˆλ‹€.

μ² μˆ˜κ°€ 가진 μΉ΄λ“œμ— 적힌 μˆ«μžλ“€μ„ λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ λ°°μ—΄ arrayA와 μ˜ν¬κ°€ 가진 μΉ΄λ“œμ— 적힌 μˆ«μžλ“€μ„ λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ λ°°μ—΄ arrayBκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 주어진 쑰건을 λ§Œμ‘±ν•˜λŠ” κ°€μž₯ 큰 μ–‘μ˜ μ •μˆ˜ aλ₯Ό returnν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”. λ§Œμ•½, 쑰건을 λ§Œμ‘±ν•˜λŠ” aκ°€ μ—†λ‹€λ©΄, 0을 return ν•΄ μ£Όμ„Έμš”.

 

 

 

 

 

2. μ œν•œ 사항

  • 1 ≤ arrayA의 길이 = arrayB의 길이 ≤ 500,000
  • 1 ≤ arrayA의 μ›μ†Œ, arrayB의 μ›μ†Œ ≤ 100,000,000
  • arrayA와 arrayBμ—λŠ” μ€‘λ³΅λœ μ›μ†Œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

 

 

3. λ‚΄ 풀이

import math
def gcd_n(arr):
    gcd = arr[0]
    for i in arr:
        gcd = math.gcd(gcd, i)
    return gcd

def solution(arrayA, arrayB):
    a = gcd_n(arrayA)
    b = gcd_n(arrayB)
    
    for i in arrayB:
        if i % a == 0:
            a = 0
            break
    for i in arrayA:
        if i % b == 0:
            b = 0
            break
    
    return max(a,b)

 

1. 리슀트의 μ΅œλŒ€ κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ μ„ μ–Έ

2. 각 리슀트 별 μ΅œλŒ€ κ³΅μ•½μˆ˜ ꡬ함

3. arrayB의 μ›μ†Œκ°€ arrayA의 μ΅œλŒ€ κ³΅μ•½μˆ˜λ‘œ λ‚˜λˆ μ§€λ©΄ 0 (λ°˜λŒ€λ„ λ™μΌν•˜κ²Œ 적용)

4. 큰 수 λ°˜ν™˜

 

 

 

 

 

4. λ‹€λ₯Έ μ‚¬λžŒ 풀이

from math import gcd
from functools import reduce

def check(arrayA, arrayB):
    gcd_A = reduce(gcd, arrayA, arrayA[0])
    factors = [i for i in range(1, gcd_A//2+1) if not gcd_A % i]
    factors.append(gcd_A)
    for factor in factors[::-1]:
        if all(i % factor for i in arrayB):
            return gcd_A
    return 0

def solution(arrayA, arrayB):
    return max(check(arrayA, arrayB), check(arrayB, arrayA))
728x90
Comments