Algorithm Problem/Python

[python] λ°±μ€€ - 2014. μ†Œμˆ˜μ˜ κ³±

deo2kim 2020. 11. 9. 11:03
λ°˜μ‘ν˜•

πŸ€”λ¬Έμ œ ν•΄κ²°

  • G2 | μˆ˜ν•™, μš°μ„ μˆœμœ„ 큐

DP둜 ꡬ해보렀고 ν–ˆμ§€λ§Œ μ—­μ‹œ μ•„λ‹ˆμ—ˆλ‹€. 2**31 길이의 배열은 μ’€ μ•„λ‹Œκ±° κ°™λ‹€.

μ–΄λ €μ›Œμ„œ μ•Œκ³ λ¦¬μ¦˜ λΆ„λ₯˜λ₯Ό λ³΄λ‹ˆ μš°μ„ μˆœμœ„ 큐둜 ν•΄κ²°ν•˜λŠ” λ¬Έμ œμ˜€λ‹€.

 

μš°μ„ μˆœμœ„νλŠ” 큐 μ•ˆμ— μžˆλŠ” κ°’λ“€ 쀑 μ΅œμ†Œ 값을 λ°˜ν™˜ν•  수 μžˆλ‹€.

νŒŒμ΄μ¬μ—μ„œλŠ” νž™νλ₯Ό λΆˆλŸ¬μ™€μ„œ μ‚¬μš©ν•˜κ³  νž™νλŠ” μ΅œμ†Œνž™ 기반으둜 λ˜μ–΄μžˆλ‹€.

 

해결방법은

  1. 졜초 νž™νμ— 주어진 μ†Œμˆ˜λ₯Ό λ„£λŠ”λ‹€.
  2. νž™νμ—μ„œ 숫자λ₯Ό ν•˜λ‚˜μ”© κΊΌλ‚΄λ©΄μ„œ 주어진 μ†Œμˆ˜λ“€μ„ κ³±ν•΄μ„œ νž™νμ— λ„£λŠ”λ‹€.
    1. (이 λ•Œ κΊΌλ‚΄λŠ” νšŸμˆ˜κ°€ μ†Œμˆ˜μ˜ κ³±λ“€ μ€‘μ—μ„œ N번째 μˆ˜μ΄λ‹€)
  3. ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ 되면 쀑볡이 λ°œμƒν•œλ‹€. ( 2*3 μ΄λ‚˜ 3*2 )
  4. 3*2λŠ” λ˜μ§€λ§Œ 2*3은 μ•ˆλœλ‹€λŠ” μ‹μœΌλ‘œ νž™νμ—μ„œ κΊΌλ‚Έ μˆ˜κ°€ μ†Œμˆ˜λ‘œ λ‚˜λˆ„μ–΄ 떨어지면 κ·Έ λ‹€μŒ μ†Œμˆ˜λŠ” κ±΄λ„ˆλ›΄λ‹€.
  5. κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€

 

 

πŸ’»μ†ŒμŠ€ μ½”λ“œ

 import heapq

if __name__ == '__main__':
    K, N = map(int, input().split())
    prime = list(map(int, input().split()))

    pq = []  # κ³±ν•œ 값이 λ“€μ–΄κ°ˆ 리슀트 (μš°μ„ μˆœμœ„ 큐)
    for num in prime:
        heapq.heappush(pq, num)

    for i in range(N):  # νμ—μ„œ N번 λΉΌλ©΄ κ·Έ 값이 N번째 값이닀. (μš°μ„ μˆœμœ„ 큐)
        num = heapq.heappop(pq)
        for j in range(K):  # λΊΈ 값에 μ†Œμˆ˜λ₯Ό κ³±ν•΄μ„œ μƒˆλ‘œμš΄ 값을 λ§Œλ“ λ‹€.
            new_num = num * prime[j]
            heapq.heappush(pq, new_num)

            if num % prime[j] == 0:  # 2 X 3은 λ˜μ§€λ§Œ 3 X 2λŠ” μ•ˆλ˜λŠ” λŠλ‚ŒμœΌλ‘œ μ€‘λ³΅μ œκ±°
                break
    else:
        print(num)

 

πŸ“•λ¬Έμ œ 확인

좜처: BACKJOON ONLINE JUDGE

링크: https://www.acmicpc.net/problem/2014

 

2014번: μ†Œμˆ˜μ˜ κ³±

첫째 쀄에 K(1 ≤ K ≤ 100), N(1 ≤ N ≤ 100,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” K개의 μ†Œμˆ˜κ°€ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 주어진닀. 같은 μ†Œμˆ˜κ°€ μ—¬λŸ¬ 번 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†μœΌλ©°, μ£Όμ–΄μ§€λŠ” μ†Œμˆ˜λŠ” λͺ¨λ‘ 541보닀 μž‘κ±°λ‚˜

www.acmicpc.net

λ°˜μ‘ν˜•