본문 바로가기
Algorithm/BOJ

[BOJ]11652번: 카드 (c++)

by HBGB 2020. 7. 7.

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

 

11652번: 카드

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

www.acmicpc.net

 

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	// 입력
	int N;
	cin >> N;
	vector<long long> v(N);
	for (int i = 0; i < N; ++i)
	{
		cin >> v[i];
	}

	// 오름차순 정렬
	sort(v.begin(), v.end());


	int max_cnt = 1;
	int last_cnt = 1;
	long long num = v[0];

	// 직전 숫자와 비교하여 같은 숫자들 개수 카운팅
	for (int i = 1; i < N; ++i)
	{
		if (v[i - 1] == v[i])
		{
			++last_cnt;
		}
		else
		{
			last_cnt = 1;
		}

		// max_cnt보다 개수가 많으면 num갱신
		if (max_cnt < last_cnt)
		{
			max_cnt = last_cnt;
			num = v[i];
		}
	}

	cout << num;

	return 0;
}

 

 

map으로 개수를 세는 것보다 

정렬로 앞뒤 숫자를 비교하며 중복숫자 개수를 세는게 더 빠르다

 

map컨테이너는 자동으로 키 값의 정렬을 유지시켜 주는데,

이 말은 map에 데이터를 넣을 때마다 계속해서 정렬동작이 일어난다는 뜻이다.

 

이 문제에서는 vector로 데이터를 저장하고 마지막에 한번만 정렬을 하는게 더 효율적이다.

 

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ]1790번: 수 이어 쓰기 2 (c++)  (0) 2020.07.07
[BOJ]1377번: 버블 소트 (c++)  (0) 2020.07.07
[BOJ]2751번: 수 정렬하기 2 (c++)  (0) 2020.07.06
[BOJ]10989번: 수 정렬하기 3 (c++)  (0) 2020.07.06
[BOJ]10825번: 국영수 (c++)  (0) 2020.07.06

댓글