PS

[λ°±μ€€] 2075 N번째 큰 수 with Python

ν˜•μ€€_It's 2022. 2. 21. 17:05
728x90
λ°˜μ‘ν˜•

πŸ“Œ BOJ 2075 N번째 큰 수

πŸ’‘ 쑰건

  1. NΓ—N의 ν‘œμ— 수 N2개 μ±„μ›Œμ Έ μžˆλ‹€. μ±„μ›Œμ§„ μˆ˜μ—λŠ” ν•œ κ°€μ§€ νŠΉμ§•μ΄ μžˆλŠ”λ°,
    λͺ¨λ“  μˆ˜λŠ” μžμ‹ μ˜ ν•œ μΉΈ μœ„μ— μžˆλŠ” μˆ˜λ³΄λ‹€ ν¬λ‹€λŠ” 것이닀.

  2. ν‘œμ— μ±„μ›Œμ§„ μˆ˜λŠ” λͺ¨λ‘ λ‹€λ₯΄λ‹€.

  3. N(1 ≀ N ≀ 1,500)

  4. ν‘œμ— 적힌 μˆ˜λŠ” -10얡보닀 ν¬κ±°λ‚˜ κ°™κ³ , 10얡보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€.

  5. 자료ꡬ쑰 μ‘μš©, μš°μ„ μˆœμœ„ 큐 ν™œμš©, μ •λ ¬ μœ ν˜•μ˜ 문제

πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

from sys import stdin
import heapq

n = int(stdin.readline())
q = []
cnt = 0
for _ in range(n):
    data = list(map(int, stdin.readline().split()))
    for j in data:
        if cnt != n:
            heapq.heappush(q, j)
            cnt += 1
        else:
            if q[0] < j:
                heapq.heappop(q)
                heapq.heappush(q, j)

q.sort()
print(q[0])

πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

예제

5
12 7 9 15 5
13 8 11 19 6
21 10 26 31 16
48 14 28 35 25
52 20 32 41 49

μ‹€ν–‰κ²°κ³Ό

35

⌨️ 문제 풀이

  1. q λΌλŠ” 리슀트λ₯Ό λ§Œλ“ λ‹€. 이 λ¦¬μŠ€νŠΈλŠ” ν‘œμ˜ μ…€λ§ˆλ‹€μ˜ 숫자λ₯Ό 넣을 것이며, μš°μ„ μˆœμœ„ 큐둜 μ‚¬μš©λœλ‹€.

  2. 각 숫자λ₯Ό cnt λ³€μˆ˜κ°€ μž…λ ₯ 받은 nκ³Ό 같을 λ•ŒκΉŒμ§€ cnt + 1을 ν•΄μ£Όλ©° q 에 λ„£λŠ”λ‹€.

  3. λ§Œμ•½ q[0]의 값보닀 방금 μˆœνšŒν•˜κ³  μžˆλŠ” 값이 크닀면
    μš°μ„ μˆœμœ„κ°€ κ°€μž₯ 높은 것을 κΊΌλ‚΄κ³ , μˆœνšŒν•˜κ³  μžˆλŠ” 값을 λ„£λŠ”λ‹€.

  4. λͺ¨λ“  데이터λ₯Ό μˆœνšŒν–ˆλ‹€λ©΄, q λ₯Ό μ •λ ¬ν•˜κ³  κ°€μž₯ μ²«λ²ˆμ§Έμ— μžˆλŠ” 값을 좜λ ₯ν•œλ‹€.

πŸ’Ύ λŠλ‚€μ 

  1. μš°μ„ μˆœμœ„ 큐의 μ„±μ§ˆμ„ μ΄μš©ν•˜λŠ” λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.
  2. 자료ꡬ쑰의 κ°•μ˜λ₯Ό λ“£κΈ° μ „, μš°μ„ μˆœμœ„νλŠ” λŒ€μΆ© 이런 λŠλ‚Œμ΄μ§€~ λΌλŠ” μƒκ°μœΌλ‘œ ν’€μ—ˆλŠ”λ°
    자료ꡬ쑰 κ°•μ˜λ₯Ό 보고 문제λ₯Ό λ‹€μ‹œ λ³΄λ‹ˆ 이런 κΏ€ κ³¨λ“œλ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.
λ°˜μ‘ν˜•