ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    카운팅하는경우 주로 사용한다고하니 참고해두자.

    반응형

    댓글

Designed by Tistory.