[백준] 11652번: 카드

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

문제

예제, 반례

3
1
2
2
>> 2

알고리즘 접근 방법

입력을 받은 후, sort로 정렬한다.
왼쪽부터 수를 세면서
이전 인덱스와 같으면 cnt를 더해주고,
이전 인덱스와 다르면 cnt가 최대인지 비교한 후, cnt를 1로 초기화해준다.
최대이면 max에 저장, idx에 해당 인덱스 저장한다.

마지막에 한번 더 비교해주자..

풀이

#include <iostream>
#include <algorithm>

using namespace std;
long long arr[100001];


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

    int N;

    cin >> N;


    for (int i=0; i<N; i++)
        cin >> arr[i];
    
    sort(arr, arr+N); // 정렬

    int cnt, max, idx; // cnt = 현재 카운트 max = 젤 많은 카운트 idx = 젤 많은 숫자 idx

    cnt = 1;
    max = 1;
    idx = 0;

    for(int i=1; i<N; i++){

        if (arr[i] == arr[i-1]){ // 전에 꺼랑 같으면
            cnt++;
        }

        else{ // 다르면
            if(cnt > max){
                max = cnt;
                idx = i-1;
            }
            cnt = 1;

        }
        
    }
    
    if(cnt > max){
        max = cnt;
        idx = N-1;
    }

    cout << arr[idx] << '\n';
    
    return 0;
}

정리

첨에 문제 잘못 읽고 당황.!

💡 참고 포스팅

jow1025님 블로그
sw-ko님 블로그
반례좀 찾아주세요 ㅜㅜ

좋은 웹페이지 즐겨찾기