알고리즘/BOJ

백준 11652번 카드

꾸준함. 2018. 7. 11. 15:59

문제 링크입니다: https://www.acmicpc.net/problem/11652


적혀 있는 수는 -2^62보다 크거나 같고 2^62보다 작거나 같기 때문에 자료형을 long long으로 해주는 것이 핵심이였습니다.

카드에 적혀있는 숫자를 벡터나 배열에 집어넣고 정렬을 한 뒤, 최대 출현빈도수를 갖는 숫자를 출력해주면 되는 문제였습니다.

비교하는 숫자가 같지 않을 경우 두 가지의 경우를 고려해야합니다.

1. 최대 출현 빈도수를 갱신하는 경우

2. 최대 출현 빈도수를 갱신하지 않는 경우


반면, 비교하는 숫자가 같은 경우에는 현재 숫자의 빈도수를 늘려주면 됩니다.


#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

int N;

vector<long long> v;

 

void printCard(void)

{

        sort(v.begin(), v.end());

 

        int cnt = 1, maxCnt = 0;

        long long card;

 

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

        {

                 //숫자가 달라졌을 때 최대 출현 빈도 수 갱신할 경우

                 if (v[i - 1] != v[i] && maxCnt < cnt)

                 {

                         maxCnt = cnt; //최대 출현 빈도 수 갱신

                         card = v[i - 1]; //카드 저장

                         cnt = 1;

                 }

                 //숫자가 바뀌었지만 출현 빈도수가 같다면 초기화 X

                 //문제 조건: 출현 빈도수 같으면 작은 숫자 출력

                 else if (v[i - 1] != v[i] && maxCnt >= cnt)

                         cnt = 1;

                 else

                         cnt++;

        }

        //제일 큰 숫자가 제일 많이 출현했을 경우

        if (maxCnt < cnt)

                 card = v[N - 1];

 

        cout << card << endl;

}

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0); //cin 속도 향상 위해

        cin >> N;

 

        for (int i = 0; i < N; i++)

        {

                 long long num;

                 cin >> num;

 

                 v.push_back(num);

        }

 

        printCard();

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 9328번 열쇠  (5) 2018.07.11
백준 10814번 나이순 정렬  (2) 2018.07.11
백준 1102번 발전소  (5) 2018.07.10
백준 1021번 회전하는 큐  (0) 2018.07.10
백준 10828번 스택  (0) 2018.07.10