[210409][백준/BOJ] 11652번 카드

문제

입출력


풀이

정렬을 이용해서 해결할 수 있는 문제이다.

  1. 정수의 범위가 -2^62보다 크거나 같고, 2^62보다는 작으므로 변수타입을 long long형으로 선언한다.
  2. max를 1로 초기화 하지 않으면 모든 cnt가 같은 경우에 최소값이 아닌 최대값이 출력되므로 0이 아닌 1로 초기화 해줘야 한다.
  3. card를 초기화 하지 않으면 모든 cnt가 1인 경우에 if문에 접근을 하지못해 card가 초기화가 되지 않은 상태로 출력을 시도해서 에러가 발생하므로 배열의 첫번째 값으로 초기화 해줘야 한다.
  4. 반복문에서 시작값을 0이 아닌 1로 초기화해줘야 arr[i-1]이 배열 범위 밖에 접근하지 않는다.
  5. 이전값이랑 비교해서 같으면 cnt++ 아니면 cnt = 1을 한다.
  6. cnt와 max를 비교해서 cnt가 크면 max에 cnt값을 넣고 card에 arr[i] 값을 넣는다.

코드

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

long long arr[100002];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	for (int i = 0; i < n; ++i) cin >> arr[i];

	sort(arr, arr + n);

	// max를 1로 초기화 하지 않으면 n이 2이고 입력이 1, 2같은 경우에 1이 아닌 2가 출력이 됨
	int max = 1, cnt = 1;  
	long long card = arr[0]; // 모든 cnt가 1인 경우
	for (int i = 1; i < n; ++i) // 이전값을 확인해야 하므로 i가 0부터 시작하면 안됨
	{
		if (arr[i] == arr[i - 1]) cnt++;
		else cnt = 1;
		if (cnt > max)
		{
			max = cnt;
			card = arr[i];
		}
	}
	cout << card;
}

좋은 웹페이지 즐겨찾기