Post

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

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

문제 & 링크

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

풀이

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

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

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

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

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

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

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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;
    
}
This post is licensed under CC BY 4.0 by the author.