𝘚𝘭𝘰𝘸 𝘣𝘢𝘡 𝘴𝘡𝘦𝘒π˜₯𝘺

[λ°±μ€€] 11652번: μΉ΄λ“œ - C++ λ³Έλ¬Έ

μ½”λ”©ν…ŒμŠ€νŠΈ μ€€λΉ„/λ°±μ€€

[λ°±μ€€] 11652번: μΉ΄λ“œ - C++

.23 2021. 8. 13. 00:38
문제

μ€€κ·œλŠ” 숫자 μΉ΄λ“œ Nμž₯을 가지고 μžˆλ‹€. 숫자 μΉ΄λ“œμ—λŠ” μ •μˆ˜κ°€ ν•˜λ‚˜ μ ν˜€μžˆλŠ”λ°, μ ν˜€μžˆλŠ” μˆ˜λŠ” -262보닀 ν¬κ±°λ‚˜ κ°™κ³ , 262보닀 μž‘κ±°λ‚˜ κ°™λ‹€.

μ€€κ·œκ°€ 가지고 μžˆλŠ” μΉ΄λ“œκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ°€μž₯ 많이 가지고 μžˆλŠ” μ •μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. λ§Œμ•½, κ°€μž₯ 많이 가지고 μžˆλŠ” μ •μˆ˜κ°€ μ—¬λŸ¬ 가지라면, μž‘μ€ 것을 좜λ ₯ν•œλ‹€.

 

μž…λ ₯

첫째 쀄에 μ€€κ·œκ°€ 가지고 μžˆλŠ” 숫자 μΉ΄λ“œμ˜ 개수 N (1 ≤ N ≤ 100,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개 μ€„μ—λŠ” 숫자 μΉ΄λ“œμ— μ ν˜€μžˆλŠ” μ •μˆ˜κ°€ 주어진닀.

 

좜λ ₯

첫째 쀄에 μ€€κ·œκ°€ κ°€μž₯ 많이 가지고 μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€.


정렬을 μ΄μš©ν•˜μ—¬ ν’€ 수 μžˆλŠ” 문제.

μΉ΄λ“œμ— μ ν˜€μžˆλŠ” μˆ«μžμ™€ κ·Έ 숫자 μΉ΄λ“œμ˜ μž₯수λ₯Ό λ§€μΉ˜μ‹œν‚€κΈ° μœ„ν•΄ mapμ΄λΌλŠ” 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€.

iteration을 λŒλ©΄μ„œ κ°€μž₯ λ§Žμ€ μΉ΄λ“œμ˜ 개수λ₯Ό maxλΌλŠ” λ³€μˆ˜μ— 기둝해두고, λ‹€μ‹œ μ²˜μŒλΆ€ν„° iteration을 λŒλ©΄μ„œ maxμž₯이 μžˆλŠ” μΉ΄λ“œλ“€ 쀑 κ°€μž₯ μž‘μ€ μΉ΄λ“œμ˜ 수λ₯Ό min에 κΈ°λ‘ν•œλ‹€. 

 

μ½”λ“œ
#include <cstdio>
#include <map>

using namespace std;

int main(void) {
    int n;
    scanf("%d", &n);

    map<long long, int> card;
    for(int i = 0; i < n; i++) {
        long long temp;
        scanf("%lld", &temp);
        card[temp]++;
    }
    
    map<long long, int>::iterator it = card.begin();
    long long min = __LONG_LONG_MAX__;
    int max = 0;
    
    while(it != card.end()) {
        if(it->second > max) {
            max = it->second;
        }
        it++;
    }

    it = card.begin();
    while(it != card.end()) {
        if(max == it->second) {
            min = it->first < min ? it->first : min;
        }
        it++;
    }
    printf("%lld\n", min);
    return 0;
}
Comments