11652
문제
준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다.
준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.
입력
첫째 줄에 준규가 가지고 있는 숫자 카드의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 숫자 카드에 적혀있는 정수가 주어진다.
출력
첫째 줄에 준규가 가장 많이 가지고 있는 정수를 출력한다.
풀이
이 문제를 풀기 위해 사용하는 자료구조 중 map이라는 자료구조가 있다. 일단 이에 대해 알아보고자 한다.
map
map은 set 자료구조처럼 연관 컨테이너이다. 이는 파이썬 딕셔너리처럼 key와 value가 존재하는 자료구조라는 뜻이다. 선언은 map <key, value>로 한다.
이 문제에서 2^-62 ~ 2^62 사이의 모든 값들을 검색하려면 너무 비효율적이다. 이럴 때 연관 컨테이너는 찾고자 하는 원소를 빨리 찾는데 용이하다. (시간복잡도 : n*log2(n))
코드
stackoverrun에서 발췌한 내용이다.
As soon as you access the map with the [] operator, if the key doesn't exist it gets added. The default initializer of the int type gets invoked - so it will get a value of 0.
만약 map 구조를 []로 통해 접근할때, 해당 키가 없으면 int는 default값으로 0이 저장되는 모양이다.
#include <iostream>
#include <vector>
#include <map>
using namespace std;
typedef long long l;
int main() {
int n;
l num, key;
map<l, int> arr;
int max = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%lld", &num);
arr[num]++;
}
for (auto x : arr)
{
if (max < x.second)
{
max = x.second;
key = x.first;
}
}
cout << key;
return (0);
}
Author And Source
이 문제에 관하여(11652), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lsmmay322/백준-11652저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)