λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“ μ•Œκ³ λ¦¬μ¦˜/Code Tree

[μ½”λ“œνŠΈλ¦¬] TreeSet μ—°μŠ΅λ¬Έμ œ

문제 : top K 숫자

n개의 μˆ«μžκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 쀑볡을 μ œμ™Έν•˜κ³  λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν–ˆμ„ λ•Œ μ•žμ— μžˆλŠ” k개의 숫자λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•΄λ³΄μ„Έμš”.


μž…λ ₯ ν˜•μ‹

첫 번째 μ€„μ—λŠ” μ›μ†Œμ˜ 개수 nκ³Ό kκ°€ 곡백을 사이에 두고 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

두 번째 μ€„μ—λŠ” n개의 μ›μ†Œκ°€ 곡백을 사이에 두고 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

  • 1 ≤ k ≤ n ≤ 100,000
  • 1 ≤ μ£Όμ–΄μ§€λŠ” μ›μ†Œ κ°’ ≤ 

좜λ ₯ ν˜•μ‹

쀑볡을 μ œμ™Έν•˜κ³  λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν–ˆμ„ λ•Œ μ•žμ— μžˆλŠ” k개의 숫자λ₯Ό 곡백을 사이에 두고 좜λ ₯ν•©λ‹ˆλ‹€. 쀑볡을 μ œμ™Έν–ˆμ„ λ•Œ μ›μ†Œμ˜ κ°œμˆ˜κ°€ k보닀 μž‘μ€ κ²½μš°λŠ” μ—†λ‹€κ³  가정해도 μ’‹μŠ΅λ‹ˆλ‹€.

 

 

λ‚˜μ˜ 풀이

 

#include <iostream>
#include <set>
using namespace std;

int main() {
    int n; int k; int a;
    set<int> s;
    cin >> n >> k;
    for(int i=0; i<n; ++i){
        cin >> a;
        s.insert(a);
    }
    for(int i=0; i<k; ++i){
        cout << *s.rbegin() << " ";
        s.erase(*s.rbegin());
    }
    return 0;
}

 

λ§ˆμ§€λ§‰ μ›μ†Œ 좜λ ₯ ν›„, λ§ˆμ§€λ§‰ μ›μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 것을 λ°˜λ³΅ν•˜λŠ” μ‹μœΌλ‘œ ν’€μ–΄μ„œ ν•΄κ²°ν–ˆλŠ”λ°

ν•΄μ„€μ—λŠ” λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ„€λͺ…이 λ˜μ–΄μžˆμ—ˆμŒ.

λŒ€μΆ© μž…λ ₯값에 -1을 κ³±ν•΄μ„œ set에 집어넣고,,, (λ‚΄λ¦Όμ°¨μˆœμ„ μœ„ν•΄μ„œ)

μ•„λž˜ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•΄μ„œ μ•žμ—μ„œλΆ€ν„° μ΄ν„°λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•΄μ„œ 좜λ ₯함.

for(set<int>::iterator it = s.begin(); cnt < k; it++)

 

이런 방법도 있ꡬ만~~~

 

근데 아직은 iterator μ‚¬μš©μ— μ΅μˆ™ν•˜μ§€ μ•Šμ•„μ„œ ,,, 곡뢀 더 ν•΄μ•Όκ² λ‹€.

μ½”λ“œνŠΈλ¦¬λŠ” UIκ°€ 신생 μ‚¬μ΄νŠΈ κ°™μ•„μ„œ 별 κΈ°λŒ€λ₯Ό ν•˜μ§€ μ•Šμ•˜λŠ”λ° μ˜ˆμƒμ™Έλ‘œ 문제 퀄리티가 쒋은듯!!

 

 

문제 좜처 μ½”λ“œνŠΈλ¦¬