문제
11652번: 카드
준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지
www.acmicpc.net
풀이
다뤄야 할 데이터, N의 최대 개수는 십만개이지만,
카드에 입력될 수 있는 수의 범위는 -2의 62승~ 2의 62승이므로 long타입 배열을 선언한다.
카드배열에 수를 입력받은 뒤 가장 많은 개수의 카드의 값을 출력하는 문제이다.
주의할 점은 가장 많은 개수의 카드가 여러종류일 경우 카드의 숫자가 더 작은 것을 출력한다는 점이다.
생각해보면 두 가지 방법이 있다.
방법1) Arrays.sort로 오름차순 정렬을 한 뒤 카드 개수를 카운트하기
방법2) HashMap을 사용
- 가장 많은 개수의 카드를 갱신
- 같은 개수일 경우 카드의 숫자가 더 작은 것으로 갱신
나는 방법1을 사용하여 풀어보았다. 마지막에 헷갈리는 부분은 인터넷을 참고했다..
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws NumberFormatException, 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; //카드는 적어도 한장
int maxCnt=1, maxIdx = 0; //가장 큰 수 저장
//카드 개수 세기
for(int i=1; i<N; i++) {
if(card[i-1] == card[i]) cnt++; //같은 값이면 카운트 증가
else cnt = 1; //다른 값이면 카운트는 1
//매번 maxCnt와 비교
if(maxCnt < cnt) { //클 경우에만 max값을 바꾸므로 같은 카운트면 작은 수가 max값이 됨
maxCnt = cnt;
maxIdx = i;
}
}
System.out.println(card[maxIdx]);
}
}
'PS(Java) > 백준' 카테고리의 다른 글
[PS] 백준 10828번 스택 (0) | 2022.05.25 |
---|---|
[PS] 백준 11004번 K번째 수 (0) | 2022.05.24 |
[PS] 백준 10989번 수 정렬하기 3 (0) | 2022.05.21 |
[PS] 백준 10825번 국영수 (0) | 2022.05.20 |
[PS] 백준 10814번 나이 순 정렬 (0) | 2022.05.19 |