[210409][백준/BOJ] 11652번 카드
문제
입출력
풀이
정렬을 이용해서 해결할 수 있는 문제이다.
- 정수의 범위가 -2^62보다 크거나 같고, 2^62보다는 작으므로 변수타입을 long long형으로 선언한다.
- max를 1로 초기화 하지 않으면 모든 cnt가 같은 경우에 최소값이 아닌 최대값이 출력되므로 0이 아닌 1로 초기화 해줘야 한다.
- card를 초기화 하지 않으면 모든 cnt가 1인 경우에 if문에 접근을 하지못해 card가 초기화가 되지 않은 상태로 출력을 시도해서 에러가 발생하므로 배열의 첫번째 값으로 초기화 해줘야 한다.
- 반복문에서 시작값을 0이 아닌 1로 초기화해줘야 arr[i-1]이 배열 범위 밖에 접근하지 않는다.
- 이전값이랑 비교해서 같으면 cnt++ 아니면 cnt = 1을 한다.
- 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;
}
Author And Source
이 문제에 관하여([210409][백준/BOJ] 11652번 카드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kwkim95/210409백준BOJ-11652번-카드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)