🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 숫자 κ²Œμž„ (level3, python)

개발자 HOON 2022. 9. 20. 21:15

문제 μ„€λͺ…

xx νšŒμ‚¬μ˜ 2xNλͺ…μ˜ 사원듀은 Nλͺ…μ”© 두 νŒ€μœΌλ‘œ λ‚˜λˆ  숫자 κ²Œμž„μ„ ν•˜λ €κ³  ν•©λ‹ˆλ‹€. 두 개의 νŒ€μ„ 각각 AνŒ€κ³Ό BνŒ€μ΄λΌκ³  ν•˜κ² μŠ΅λ‹ˆλ‹€. 숫자 κ²Œμž„μ˜ κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

  • λ¨Όμ € λͺ¨λ“  사원이 λ¬΄μž‘μœ„λ‘œ μžμ—°μˆ˜λ₯Ό ν•˜λ‚˜μ”© λΆ€μ—¬λ°›μŠ΅λ‹ˆλ‹€.
  • 각 사원은 λ”± ν•œ λ²ˆμ”© κ²½κΈ°λ₯Ό ν•©λ‹ˆλ‹€.
  • 각 κ²½κΈ°λ‹Ή AνŒ€μ—μ„œ ν•œ 사원이, BνŒ€μ—μ„œ ν•œ 사원이 λ‚˜μ™€ μ„œλ‘œμ˜ 수λ₯Ό κ³΅κ°œν•©λ‹ˆλ‹€. κ·Έλ•Œ μˆ«μžκ°€ 큰 μͺ½μ΄ μŠΉλ¦¬ν•˜κ²Œ 되고, μŠΉλ¦¬ν•œ 사원이 μ†ν•œ νŒ€μ€ μŠΉμ μ„ 1점 μ–»κ²Œ λ©λ‹ˆλ‹€.
  • λ§Œμ•½ μˆ«μžκ°€ κ°™λ‹€λ©΄ λˆ„κ΅¬λ„ μŠΉμ μ„ μ–»μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

전체 사원듀은 μš°μ„  λ¬΄μž‘μœ„λ‘œ μžμ—°μˆ˜λ₯Ό ν•˜λ‚˜μ”© λΆ€μ—¬λ°›μ•˜μŠ΅λ‹ˆλ‹€. κ·Έλ‹€μŒ AνŒ€μ€ λΉ λ₯΄κ²Œ μΆœμ „μˆœμ„œλ₯Ό μ •ν–ˆκ³  μžμ‹ λ“€μ˜ μΆœμ „ μˆœμ„œλ₯Ό BνŒ€μ—κ²Œ κ³΅κ°œν•΄λ²„λ ΈμŠ΅λ‹ˆλ‹€. BνŒ€μ€ 그것을 보고 μžμ‹ λ“€μ˜ μ΅œμ’… μŠΉμ μ„ κ°€μž₯ λ†’μ΄λŠ” λ°©λ²•μœΌλ‘œ νŒ€μ›λ“€μ˜ μΆœμ „ μˆœμ„œλ₯Ό μ •ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œμ˜ BνŒ€μ΄ μ–»λŠ” μŠΉμ μ„ κ΅¬ν•΄μ£Όμ„Έμš”.


A νŒ€μ›λ“€μ΄ 뢀여받은 μˆ˜κ°€ μΆœμ „ μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄λ˜μ–΄μžˆλŠ” λ°°μ—΄ A와 i번째 μ›μ†Œκ°€ BνŒ€μ˜ i번 νŒ€μ›μ΄ 뢀여받은 수λ₯Ό μ˜λ―Έν•˜λŠ” λ°°μ—΄ Bκ°€ μ£Όμ–΄μ§ˆ λ•Œ, B νŒ€μ›λ“€μ΄ 얻을 수 μžˆλŠ” μ΅œλŒ€ μŠΉμ μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.


μ œν•œμ‚¬ν•­
  • A와 B의 κΈΈμ΄λŠ” κ°™μŠ΅λ‹ˆλ‹€.
  • A와 B의 κΈΈμ΄λŠ” 1 μ΄μƒ 100,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • A와 B의 각 μ›μ†ŒλŠ” 1 μ΄μƒ 1,000,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

μž…μΆœλ ₯ 예 μ„€λͺ…

 

μž…μΆœλ ₯ 예 #1


A νŒ€μ€ 숫자 5λ₯Ό 뢀여받은 νŒ€μ›μ΄ 첫번째둜 μΆœμ „ν•˜κ³ , μ΄μ–΄μ„œ 1,3,7을 뢀여받은 νŒ€μ›λ“€μ΄ μ°¨λ‘€λŒ€λ‘œ μΆœμ „ν•©λ‹ˆλ‹€.
B νŒ€μ›λ“€μ„ 4번, 2번, 3번, 1번의 μˆœμ„œλŒ€λ‘œ μΆœμ „μ‹œν‚¬ 경우 νŒ€μ›λ“€μ΄ 뢀여받은 μˆ«μžλ“€μ€ μ°¨λ‘€λŒ€λ‘œ 8,2,6,2κ°€ λ©λ‹ˆλ‹€. 그러면, 첫 번째, 두 번째, μ„Έ 번째 κ²½κΈ°μ—μ„œ μŠΉλ¦¬ν•˜μ—¬ 3점을 μ–»κ²Œ 되고, μ΄λ•Œκ°€ μ΅œλŒ€μ˜ μŠΉμ μž…λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예 #2
B νŒ€μ›λ“€μ„ μ–΄λ–€ μˆœμ„œλ‘œ μΆœμ „μ‹œμΌœλ„ BνŒ€μ˜ μŠΉμ μ€ 0μ μž…λ‹ˆλ‹€.


풀이 μ½”λ“œ

import heapq

def solution(A, B):
    answer = 0
    heapq.heapify(A)
    heapq.heapify(B)
    
    while A and B:
        a = heapq.heappop(A)
        b = heapq.heappop(B)
        
        if a < b:
            answer += 1
        else:
            heapq.heappush(A, a)
            
    return answer

νž™ 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•΄μ„œ ν’€μ—ˆλ‹€.

 

문제λ₯Ό λ‹€λ₯΄κ²Œ ν•΄μ„ν•˜λŠ” 게 μ€‘μš”ν•œ ν¬μΈνŠΈμ˜€λ‹€.

A 내에 사원이 λ‚Ό μˆœμ„œκ°€ μ •ν•΄μ‘Œλ‹€κ³  ν•΄μ„œ, 거기에 λ§žμΆ°μ„œ 값을 뽑을 ν•„μš”λŠ” μ—†λ‹€.

μ–΄μ°¨ν”Ό μ΅œλŒ€λ‘œ λ‚Ό 수 μžˆλŠ” '승점'만 μ–»μœΌλ©΄ λ˜λ―€λ‘œ, ꡳ이 μˆœμ„œμ— λ§žμΆ”μ§€ μ•Šκ³  μ΅œλŒ€ν•œ 효율적으둜 ꡬ할 수 μžˆλŠ” 방법을 μ°Ύμ•„μ•Ό ν•œλ‹€.

 

μ—¬κΈ°μ„œ, 정렬을 ν•΄λ³΄μž.

A) 5, 1, 3, 7 → 1, 3, 5, 7

B) 2, 2, 6, 8

 

A와 B의 κ°€μž₯ μž‘μ€ 값듀을 λΉ„κ΅ν•΄λ³΄μž.

AλŠ” 1, BλŠ” 2μ΄λ―€λ‘œ Bκ°€ 이길 수 μžˆλ‹€.

 

λ‹€μŒ κ°’μœΌλ‘œλŠ” AλŠ” 3, BλŠ” 2이닀. BλŠ” 이길 수 μ—†μœΌλ―€λ‘œ, B의 κ°’λ§Œ 버리고 λ‹€μŒ κ°’κ³Ό λΉ„κ΅ν•œλ‹€.

AλŠ” 3, BλŠ” 6을 λΉ„κ΅ν•˜λ©΄ Bκ°€ μ΄κΈ°λ―€λ‘œ, A와 B의 κ°’ λͺ¨λ‘ μ—†μ•€λ‹€.

이와 같은 둜직으둜 ν•˜λ©΄, Aμ—μ„œ λ‚˜μ˜¨ κ°’κ³Ό Bμ—μ„œ λ‚˜μ˜¨ 값이 같은 μƒν™©μ—μ„œλ„ B의 κ°’ ν•˜λ‚˜λ§Œ 버리면 졜적의 μƒλŒ€λ₯Ό 찾을 수 μžˆλ‹€.

 

A ν˜Ήμ€ B λ‚΄λΆ€κ°€ ν•˜λ‚˜λΌλ„ λΉˆλ‹€λ©΄, λ‘œμ§μ„ λ©ˆμΆ˜λ‹€.

μ •λ ¬ λŒ€μ‹ , Heap을 μ‚¬μš©ν•΄μ„œ λ”μš± μ΅œμ ν™” 된 νš¨μœ¨μ„±μ„ 얻을 수 μžˆλ‹€.