Koala - 15기/기초 알고리즘 스터디

[백준/C++] 11652번: 카드

.우디. 2024. 7. 9. 02:24

문제 & 링크

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

 

풀이

!! 범위를 고려하여 long long int 자료형을 사용하여야 함 !!

 

1. map 자료구조를 사용하여 입력받을 카드의 숫자를 키, 해당 카드가 나온 횟수를 값으로 가지도록 한다. 

*  map 자료구조의 특징으로는 키와 값을 쌍으로 가진다는 것, 레드-블랙 트리(균형 이진 트리)를 사용하여 키를 오름차순으로 정렬하여 관리한다는 것, 중복 키를 허용하지 않는다는 것 등이 있다.

2. 입력받은 숫자를 map 자료구조에 삽입하고 해당 키와 쌍으로 이루어진 값을 1 증가시킨다.

3. auto를 이용해서 map을 순회한 후, 최빈값을 찾아낸다.

*  auto는 변수의 타입을 자동으로 추론하여 선언할 수 있게 해주는 기능으로, 이 문제를 해결할 때는 map의 iterator(반복자)로 사용되었다.

 

코드

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main() {
    int N;
    map<long long, int> M;
    
    cin >> N;
    
    for (int i = 0; i < N; i++) {
        long long x;
        cin >> x;
        M[x]++;        
    }
    
    int max = 0;
    long long ans;
    for (auto i = M.begin(); i != M.end(); i++) {
        if (max < i -> second) {
            max = i -> second; // map의 값(int)
            ans = i -> first; // map의 키(long long)
        }
    }
    
    cout << ans;
    
}