-
JAVA 알고리즘 문제 - 학급회장(Hash Map)Java 알고리즘 문제/자바(Java) 알고리즘 문제풀이 입문 2023. 10. 16. 14:04반응형
학급회장(Hash Map)
설명
학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요.
반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.
입력
첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 입력됩니다.
출력
학급 회장으로 선택된 기호를 출력합니다.
예시 입력
8
AABBEACD출력 예시
A
전체코드
import java.util.HashMap; import java.util.Scanner; public class Main { public char test(int n, String str) { char answer =' '; HashMap<Character, Integer> map = new HashMap(); for(char x : str.toCharArray()){ map.put(x, map.getOrDefault(x, 0)+1); } int max= Integer.MIN_VALUE; for(char key : map.keySet()) { if(map.get(key)>max) { max=map.get(key); answer=key; } } return answer; } public static void main(String[] args){ Main t = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); String str = kb.next(); System.out.println(t.test(n, str)); } }
설명
HashMap을 이용하여 해당 문제를 풀어보려한다.
간단하게 입력받은 후보의 기호들을 카운팅을 하여 가장 숫자가 높은 후보의 기호를 출력하면 된다.
여기서는 getOrDefault를 사용하여 문제를 해결하려고한다.
public char test(int n, String str) { char answer =' '; HashMap<Character, Integer> map = new HashMap(); for(char x : str.toCharArray()){ //map.getOrDefault(x, 0) => 해당 값이 있으면 해당 값을 가져온다. //가져온 값에서 +1을 해주는 것 //없으면 map.getOrDefault 라는 값이 key인 x값이 없으니까 0을 리턴한다 //그리고 난 후 +1을 해준다. map.put(x, map.getOrDefault(x, 0)+1); } int max= Integer.MIN_VALUE; //System.out.println("max ==>" + max); for(char key : map.keySet()) { //System.out.println(key+" "+map.get(key)); if(map.get(key)>max) { max=map.get(key); answer=key; //System.out.println("answer ==>" +answer); } } return answer; }
이해를 돕기위해 표를 그려보겠다.
key value A 2 B 1 이와같은 HashMap이 있다고 하자.
여기서 map.put(x, map.getOrDefault(x, 0)+1); 하는 경우 C라는 기호의 차례라면
해당 map에는 C라는 key값이 존재하지 않는다. 그렇기 때문에 map.getOrDefault(x, 0) => 0을 반환하게 되고
map.put(x, 0+1); 이 되어 아래와같이 값이 세팅되어진다.
key value A 2 B 1 C 1 카운팅하는경우 주로 사용한다고하니 참고해두자.
반응형'Java 알고리즘 문제 > 자바(Java) 알고리즘 문제풀이 입문' 카테고리의 다른 글
JAVA 알고리즘 문제 - 매출액의 종류(sliding window) (0) 2023.10.17 JAVA 알고리즘 문제 - 아나그램(Anagram) (0) 2023.10.16 [JAVA] 알고리즘 문제 - 격자판 최대합 (0) 2023.08.18 [JAVA] 알고리즘 문제 - 등수 구하기 (0) 2023.08.14 [JAVA] 알고리즘 문제 - 점수 계산 (0) 2023.08.14