-
11652번: 카드
준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지
www.acmicpc.net
문제
준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다.
준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.
조건
[입력]
첫째 줄에 준규가 가지고 있는 숫자 카드의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 숫자 카드에 적혀있는 정수가 주어진다.
[출력]
첫째 줄에 준규가 가장 많이 가지고 있는 정수를 출력한다.
풀이
해당 문제는 map를 이용해서 해결했다. 먼저 입력값들을 map에 입력해 준다. (입력값의 범위가 int형을 벗어나기 때문에 Long으로 주어야 한다!) 이때 TreeMap을 이용하면 키값으로 정렬을 해주므로 자동 오름차순 정렬이 가능하다.
이후 Map를 List로 변환하면서 Value 값 기준으로 내림차순 정렬을 하고 최종적으로 list의 가장 첫 번째 값의 키를 출력하면 된다.
코드
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.TreeMap; public class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); long N = Long.parseLong(br.readLine()); // 입력값 범위가 int형을 넘음 TreeMap<Long, Integer> map = new TreeMap<>(); // 트리맵을 통해 키값 오름차순으로 정렬 for (int i = 0; i < N; i++) { long M = Long.parseLong(br.readLine()); map.put(M, map.getOrDefault(M,0)+1); // map에 해당값이 있으면 1증가시켜넣음 } List<Map.Entry<Long, Integer>> list = new LinkedList<>(map.entrySet()); // map를 list로 변화 정렬학 위해 list.sort(Map.Entry.comparingByValue((a,b) -> b - a)); // 람다식 사용 value값 기준 내림차순 정렬 System.out.println(list.get(0).getKey()); // 젤 상단값 출력 } }
GitHub - JUNGSOONIL/Algorithm-JAVA: 알고리즘 문제 해결 자바 소스 코드
알고리즘 문제 해결 자바 소스 코드. Contribute to JUNGSOONIL/Algorithm-JAVA development by creating an account on GitHub.
github.com
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 19583 싸이버개강총회 JAVA (0) 2022.05.21 Backjoon 11123 양 한마리... 양 두마리... JAVA (0) 2022.05.20 Baekjoon 11967 불켜기 JAVA (0) 2022.05.15 Baekjoon 1303 전쟁 - 전투 JAVA (0) 2022.05.14 Baekjoon 12851 숨바꼭질 2 JAVA (0) 2022.03.08 댓글