문제
설명
학급 회장을 뽑는데 후보로 기호 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
'Algorithm > Inflearn' 카테고리의 다른 글
[Inflearn] 영리한 프로그래밍을 위한 알고리즘 - 힙 정렬 (heap sort) (0) | 2023.01.10 |
---|---|
[Inflearn] 자바 알고리즘 문제풀이 #04-02 2. 아나그램(해쉬) (0) | 2023.01.07 |
[Inflearn] 자바 알고리즘 문제풀이 #03-06 6. 최대 길이 연속부분수열 (0) | 2022.12.19 |
[Inflearn] 자바 알고리즘 문제풀이 #03-05 5. 연속된 자연수의 합 (0) | 2022.12.18 |
[Inflearn] 자바 알고리즘 문제풀이 #03-04 4. 연속 부분 수열 (0) | 2022.12.16 |