«   2022/08   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
Archives
Today
11
Total
93,048
관리 메뉴

차근차근

[백준 11652] 카드 본문

대학교/Algorithm

[백준 11652] 카드

SWKo 2020. 4. 4. 03:06

0. 제목

  • 백준 11652 카드
  • BOJ 11652 카드
  • C++ 11652 카드

1. 문제

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

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.

www.acmicpc.net


2. 풀이

  • 적혀있는 수의 범위가 크기 때문에 자료형을 long long으로 사용하는 것이 핵심이다.
  • 처음에 배열을 입력받은 후, sort로 정렬을 한다.
  • 그 후 가장 앞의 원소부터 다음 원소와 같은지를 비교한다. 같으면 연속적으로 나오는 개수를 증가시키고 다르면 1로 초기화시킨다.
  • 매 루프마다 연속적으로 나오는 개수의 최댓값을 계산하고 그 때의 배열 원소값을 정답 변수에 갱신시켜준다.
  • 반복문이 끝난 후 정답 변수를 출력해주면 끝난다.

3. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <algorithm>
using namespace std;
 
int main(int argc, const char * argv[]) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    int N;
    int max = 1;
    long long ans;
    long long arr[100001];
    int cnt = 1;
    
    cin >> N;
 
    for(int i = 0; i < N; i++){
        cin >> arr[i];
    }
    
    sort(arr, arr + N);
    ans = arr[0];
    for(int i = 1; i < N; i++){
        if(arr[i] == arr[i-1])
            cnt++;
        else
            cnt = 1;
        
        if(max < cnt){
            max = cnt;
            ans = arr[i];
        }
    }
    
    cout << ans << '\n';
    
    return 0;
}
 
 

 

'대학교 > Algorithm' 카테고리의 다른 글

[백준 2798] 블랙잭  (0) 2020.04.06
[백준 11004] K번째 수  (0) 2020.04.05
[백준 11652] 카드  (2) 2020.04.04
[백준 10989] 수 정렬하기 3  (0) 2020.04.04
[백준 10825] 국영수  (0) 2020.04.04
[백준 1182] 부분수열의 합  (0) 2020.03.24
2 Comments
댓글쓰기 폼