본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 11652/c++] 카드

by tokkiC 2022. 7. 13.

백준 1302 번 문제의 베스트셀러와 같은 방법을 이용하여 풀었다

조건이 매우 큰 수이지만, -2^62 ~ 2^62 사이이므로

long long 타입의 -2^63 ~ 2^63-1 사이의 범위 이내이므로 따로 어렵게 생각할 필요없이 

그대로 long long 타입으로 계산하면 되는 문제였다...

난 long long 범위 넘는 줄 알고 string 이용해서 풀려고 하다가 cmp 에서 머리 터졌지만ㅜㅜ 자료형의 중요성!

수가 크다고 바로 string 을 생각 말고 항상 수로 표현 가능한 자료형 범위인지 다시 생각해보고 문제를 풀자

+ 100000 개의 카드이므로 집합 10만개를 0으로 초기화 후, 카드마다 그 수의 인덱스에 카운트++ 하는 방법도

있지만, 그럴 경우 10만개의 메모리를 할당, 차지해야하므로 메모리 낭비가 크니 map 을 이용하는 것이

더 스마트한 코딩이 될 것이라 생각해서 map 을 사용하여 풀었다

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

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

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

bool cmp(pair<ll, int> a, pair<ll, int> b) {	
	if (a.second == b.second) {
		return a.first < b.first;
	}
	return a.second > b.second;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	
	int n;
	ll m;
	unordered_map<ll, int> mapi;
	
	cin >> n;	
	for (int i = 0; i < n; i++) {
		cin >> m;
		mapi[m]++;
	}
	vector<pair<ll, int>> v(mapi.begin(), mapi.end());
	sort(v.begin(), v.end(), cmp);
	cout << v.front().first << "\n";
	
	return 0;
}

댓글