본문 바로가기

Algorithm/Inflearn

[Inflearn] 자바 알고리즘 문제풀이 #04-01 1. 학급 회장(해쉬)

문제

설명

학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.

투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.

선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요.

반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.

 

입력 

첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.

두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 입력됩니다.

 

출력 

학급 회장으로 선택된 기호를 출력합니다.

 

 

 

내 풀이
import java.util.Arrays;
import java.util.Scanner;

public class Main4_1 {
    public char Solution(char[] arr) {
        int score[] = new int[arr.length];
        for(char x : arr) {
            if(x=='A') score[0]++;
            else if(x=='B') score[1]++;
            else if(x=='C') score[2]++;
            else if(x=='D') score[3]++;
            else score[4]++;
        }
        System.out.println(Arrays.toString(score));

        int max_index=0, max=Integer.MIN_VALUE;
        for (int i = 0; i < score.length; i++) {
            if(max < score[i]) {
                max = score[i];
                max_index = i;
            }
        }
        if(max_index==0) return 'A';
        else if(max_index==1) return 'B';
        else if(max_index==2) return 'C';
        else if(max_index==3) return 'D';
        else return 'E';
    }

    public static void main(String[] args) {
        Main4_1 T = new Main4_1();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String str = sc.next();
        char[] arr = str.toCharArray();
        System.out.println(T.Solution(arr));
    }
}

'오답입니다'는 너무 오랜만에 보는데ㅋㅋㅋㅋㅋㅋ내 멘탈.. 챕터 넘어갈 때마다 너무 생소한 개념들이라 마상이다ㅠㅠ

알고리즘 풀이는 학교에서 배운 자바 수업이랑 너무 다르다고 또 느끼는 중.. 개념 배우면 뭐해 코딩하라고 하면 백지장 되는데...

문제 이름에 해쉬라고 되어 있는데 해쉬를 한 번도 구현해 본 적이 없어서 안쓰고 구현할 수 있는 최선이었다고 생각한다...

앞으로 더 배워가면 되니까!!! 이번 챕터도 아자아잣

 

 

 

선생님 풀이
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;

public class Main4_1 {
    public char Solution(int n, String s) {
        char answer=' ';
        HashMap<Character, Integer> map = new HashMap<>();
        for(char x : s.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) {
        Main4_1 T = new Main4_1();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String str = sc.next();
        System.out.println(T.Solution(n, str));
    }
}

get() set() 헷갈리긴 함. 그치만 파이썬 딕셔너리랑 비슷한 것 같다.

 

for(char x : s.toCharArray()) {
    map.put(x, map.getOrDefault(x, 0)+1);
}

위 코드의 10번째 줄인 map.put(x, map.getOrDefault(x, 0)+1);  해쉬에서 많이 쓰이고 중요하다고 하셨으니 알아두자 !

아래 *알게된 점*에 hash 설명 및 주요 메소드들을 정리하였다.

 

 

 

결과

 

 

 

알게된 점

1. HashMap 개념 및 주요 메소드

https://rookie-programmer.tistory.com/60

 

[JAVA] 자바 HashMap 개념 및 주요 메서드

설명 Map인터페이스에 속해있는 컬렉션으로, 데이터들은 모두 (키, 값)의 1:1 구조로 저장된다. - 키는 중복 불가 - 같은 키의 값을 삽입하려고하면 해당 키의 값이 변경 ex) ('A', 10)을 넣은 후 ('A', 5)

rookie-programmer.tistory.com