문제

카드 백준 11652

"맞았습니다" 코드

#include <bits/stdc++.h>
using namespace std;

int maxcnt = 0;
long long cnt, n, answer = 0;
map<long long, int> nmap;

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> cnt;

  while(cnt--){
    cin >> n;
    nmap[n]++;
  }

  for(auto m: nmap){
    if(m.second > maxcnt){
      maxcnt = m.second;
      answer = m.first;
    }
  }

  cout << answer;

  return 0;
}

리뷰

map 은 key값이 중복되지 않으면서, 자동으로 오름차순 정렬된다.
value 에 숫자의 개수를 저장했다.

key 값들이 모두 같은 개수라면, 작은 수를 답으로 내야 하니까.
key를 정렬해주는 map 이 적절했다.

 

 

먼저, 입력된 숫자 마다의 개수를 센다.
그 다음 map을 반복문으로 순회하는데, 발견한 최대 개수와 최대 개수의 숫자를 저장하는 조건문을 둔다.
value는 maxcnt에 저장하고, key는 answer에 저장하는 것이다.

 

최대 개수보다 초과해야 maxcnt, answer를 갱신하니까,
key 값들이 모두 같은 개수라도, '작은 수'key 를 답으로 낼 수 있다.

728x90

'알고리즘 > 백준' 카테고리의 다른 글

1로 만들기2 백준 12852 c++  (0) 2022.02.04
피보나치 수2 백준 2748 c++  (0) 2022.02.04
구간 합 구하기4 백준 11659 c++  (0) 2021.12.23
1,2,3 더하기 백준 9095번 c++  (0) 2021.12.22
시리얼 번호 백준 1431 c++  (0) 2021.12.21

+ Recent posts