b.2696 쀑앙값 κ΅¬ν•˜κΈ°

2025. 4. 7. 14:18Β·Algorithm & Data Structures/BOJ

 

https://www.acmicpc.net/problem/2696

 

 

 

πŸ“Œ μžλ°”(Java)둜 ν‘ΈλŠ” μ€‘μ•™κ°’ κ΅¬ν•˜κΈ° - λ°±μ€€ 2696 πŸ”’

 


πŸ”Ž 문제 κ°œμš”

 

λ°±μ€€ 2696번 - 쀑앙값 κ΅¬ν•˜κΈ° λ¬Έμ œλŠ”

μ—¬λŸ¬ 개의 μˆ˜μ—΄μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ,

각 μˆ˜μ—΄λ§ˆλ‹€ ν™€μˆ˜ 번째 수λ₯Ό μž…λ ₯받을 λ•Œλ§ˆλ‹€μ˜ 쀑앙값을 κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

 

  • μž…λ ₯ μˆ˜μ—΄μ˜ 개수: T
  • 각 μˆ˜μ—΄μ€ μ΅œλŒ€ 10μ”© λŠμ–΄μ Έ μž…λ ₯
  • ν™€μˆ˜ 번째 μˆ˜κ°€ λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ 쀑앙값 좜λ ₯

 


πŸ’‘ 예제 μž…λ ₯

1
9
1 2 3 4 5 6 7 8 9

 

πŸ’‘ 예제 좜λ ₯

5
1 2 3 4 5

 

 


πŸ›  μ•Œκ³ λ¦¬μ¦˜ μ ‘κ·Ό 방식

 

이 λ¬Έμ œλŠ” λŒ€ν‘œμ μΈ 쀑앙값(Median) μœ μ§€ 문제둜,

**μ΅œλŒ€ νž™(μ™Όμͺ½ 절반) + μ΅œμ†Œ νž™(였λ₯Έμͺ½ 절반)**을 μ‚¬μš©ν•˜μ—¬ 쀑앙값을 효율적으둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€.

 

 

✏️ 핡심 아이디어

 

  • left: μ΅œλŒ€ νž™, 쀑앙값보닀 μž‘μ€ κ°’ μ €μž₯
  • right: μ΅œμ†Œ νž™, 쀑앙값보닀 큰 κ°’ μ €μž₯
  • 짝수 개 β†’ left와 right κ· ν˜• μœ μ§€,
  • ν™€μˆ˜ 개 β†’ leftκ°€ 항상 더 λ§Žλ„λ‘ μœ μ§€
  • ν™€μˆ˜ 번째 μˆ˜κ°€ λ“€μ–΄μ˜€λ©΄ left.peek()κ°€ 쀑앙값

 


πŸ”Ή Java μ½”λ“œ ν•΄μ„€

Queue<Integer> left = new PriorityQueue<>(Collections.reverseOrder()); // max heap
Queue<Integer> right = new PriorityQueue<>(); // min heap

βœ” left: 쀑앙값 μ΄ν•˜ 숫자

βœ” right: 쀑앙값 초과 숫자

 

if(left.isEmpty() || left.peek() < num){
    left.offer(num);
} else {
    right.offer(num);
}

βœ” μ²˜μŒμ—” left에 λ„£κ³ ,

βœ” 정렬을 μœ μ§€ν•˜κΈ° μœ„ν•΄ 두 νž™μ˜ μ‚¬μ΄μ¦ˆλ₯Ό 맞좰쀌

 

if (left.size() > right.size() + 1) {
    right.offer(left.poll());
} else if (right.size() > left.size()) {
    left.offer(right.poll());
}

βœ” νž™μ˜ 크기λ₯Ό **left β‰₯ right**κ°€ λ˜λ„λ‘ μœ μ§€

 

if(i % 2 == 0){
    answer++;
    sb.append(left.peek()).append(" ");
}

βœ” ν™€μˆ˜ 번째 μˆ˜κ°€ 듀어왔을 λ•Œλ§ˆλ‹€ left.peek() 좜λ ₯

βœ” μ΄λŠ” ν˜„μž¬ μž…λ ₯된 μˆ˜μ—΄μ˜ 쀑앙값

 

 

πŸ” μž…μΆœλ ₯ 처리

for(int i = 0; i < N; i += 10){
    input.append(br.readLine()).append(" ");
}

βœ” λ°±μ€€μ—μ„œ ν•œ 쀄에 μ΅œλŒ€ 10개의 숫자만 μ£Όμ–΄μ§€λ―€λ‘œ,

βœ” μ—¬λŸ¬ 쀄을 λ°›μ•„μ„œ ν•˜λ‚˜μ˜ 슀트링으둜 처리

 


πŸ† 정리

βœ… 핡심 포인트

 

βœ” 쀑앙값 λ¬Έμ œλŠ” 항상 **β€œλ‘ 개의 νž™β€**을 생각

βœ” **μ™Όμͺ½(μ΅œλŒ€ νž™)**은 쀑앙값 μ΄ν•˜

βœ” **였λ₯Έμͺ½(μ΅œμ†Œ νž™)**은 쀑앙값 초과

βœ” left.peek()κ°€ 항상 쀑앙값이 λ˜λ„λ‘ μœ μ§€

 

 

 

 

'Algorithm & Data Structures > BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

b1450. λƒ…μƒ‰λ¬Έμ œ  (1) 2025.04.10
b3665. μ΅œμ’…μˆœμœ„  (0) 2025.04.09
b.2075 N번째 큰 수  (0) 2025.04.04
b.3273 두 수의 ν•©  (0) 2025.04.01
b.11657 νƒ€μž„λ¨Έμ‹   (0) 2025.03.20
'Algorithm & Data Structures/BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • b1450. λƒ…μƒ‰λ¬Έμ œ
  • b3665. μ΅œμ’…μˆœμœ„
  • b.2075 N번째 큰 수
  • b.3273 두 수의 ν•©
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (335)
      • Algorithm & Data Structures (253)
        • BOJ (111)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (29)
        • SQL (23)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • λ„€νŠΈμ›Œν¬ (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    Java
    dp
    λ°±νŠΈλž˜ν‚Ή
    ν›„μœ„μˆœνšŒ
    Stack
    SQL
    νˆ¬ν¬μΈν„°
    programmers
    baekjoon
    Union-Find
    dfs
    ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
    Dijkstra
    κ΅¬ν˜„
    이뢄탐색
    μŠ€νƒ
    κ²½λ‘œμ••μΆ•
    λ°±μ€€
    μ „μœ„μˆœνšŒ
    μ•Œκ³ λ¦¬μ¦˜
    binarySearch
    μœ λ‹ˆμ˜¨νŒŒμΈλ“œ
    algorithm
    κ³¨λ“œ
    PriorityQueue
    DynamicProgramming
    BFS
    λ‹€μ΅μŠ€νŠΈλΌ
    λ™μ κ³„νšλ²•
    μžλ°”
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Geisha
b.2696 쀑앙값 κ΅¬ν•˜κΈ°
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.