티스토리 뷰

코딩/자바 백준

백준 11652 카드 (JAVA)

박상어 2021. 8. 30. 19:18
728x90

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

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

 

간단한 문제 같으면서도 계속되는 오류로 무엇이 문제인가 찾아보니 제 풀이에 두 개의 문제가 있었습니다.

첫 번째로는 2^62을 보고 long 타입인지 확인을 하지 못한 점

두 번째로는 hashmap에 넣고 value를 꺼내서 비교하려고 했던 점

 

우선 주어진 입력값들을 정렬합니다.

주어진 예제로 비유를 들자면 '1 1 2 2 1 2' 로 들어왔을 때, '1 1 1 2 2 2' 이런 식으로 정렬합니다.

 

그다음 1번 index부터 n-2번 index까지 해당 index에 있는 숫자의 개수와 index의 위치를 저장할 변수를 선언합니다.

정렬 후, 비교하는 방법은 bubble sort처럼 인접한 변수끼리 값을 비교합니다.

만약 둘이 같으면 숫자의 개수를 늘려주고, 다르다면 개수를 1로 초기화시켜줍니다.

 

만약 둘이 숫자가 같아서 cnt 값이 증가된다면, 자연스럽게 max(cnt) 값도 증가할 것이며 다르다면 cnt는 1로 초기화됐기 때문에 다시 max값만큼의 개수가 없는 한 max값은 유지가 되는 구조입니다.

 

 

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
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
 
        long card[] = new long[N];
 
        for (int i = 0; i < N; i++) {
            card[i] = Long.parseLong(br.readLine());
        }
 
        Arrays.sort(card);
        int cnt = 1, max = 1, maxIdx = 0;
        for (int i = 1; i < N; i++) {
            if (card[i] == card[i - 1]) {
                cnt++;
            } else {
                cnt = 1;
            }
 
            if (cnt > max) {
                max = cnt;
                maxIdx = i;
            }
        }
 
        br.close();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        bw.write(card[maxIdx] + "\n");
        bw.flush();
        bw.close();
 
    }
}
cs

 

 

 

댓글