728x90
반응형
1. 학급 회장(해쉬)
설명
학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.
선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요.
반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.
입력
첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 입력됩니다.
출력
학급 회장으로 선택된 기호를 출력합니다.
예시 입력 1
15
BACBACCACCBDEDE
예시 출력 1
C
import java.util.*;
public class Main {
public Character solution(int n, String str){
char answer=' ';
HashMap <Character, Integer> map = new HashMap<>();
char[] arr=str.toCharArray();
for(int i=0;i<n;i++){
map.put(arr[i], map.getOrDefault(arr[i],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.solution(n,str));
}
}
키와 값으로 이루어진 자료구조 -> 키에 해당하는 값을 찾을 수 있다.
HashMap <Character, Integer> map = new HashMap<>();
삽입
map.put(arr[i], map.getOrDefault(arr[i], 0)+1)
-> 키에 해당하는 값이 없으면 0을 넣고 1를 추가한다.
추출 -> 키로만 이루어진 자료구조 (키셋)
for(Character x : map.keySet()){
map.get(key)
키셋에서 키에 해당하는 값
}
참고 : 키에는 인덱스가 존재하지 않는다. -> 순서가 존재하지 않는다.
키와 값이 연결되어 있기 때문에
package hashtree.ch04;
import java.util.HashMap;
import java.util.Scanner;
public class Hashtree01 {
//회장 선출
//A, B, C, D, E 후보
//반드시 한 명의 학급회장이 선출
//N명 -> 각각 후보가 다름 hashmap
public static void main(String[] args) {
Hashtree01 T = new Hashtree01();
//클래스 객체 생성
Scanner kb = new Scanner(System.in);
//사용자에게 입력받는 객체 생성
int n = kb.nextInt();
//n명의 학생수
String str=kb.next();
//n명의 학생이 투표한 사람
System.out.println(T.solution(n,str));
//회장선출함수 호출
kb.close();
//Scanner는 닫아줘야한다.
}
public char solution (int n, String s) {
char answer=' ';
//회장 변수 선언 및 정의
HashMap<Character, Integer> map = new HashMap<>();
//char와 integer 즉, 투표한 후보, 득표수로 이루어진 자료구조
for(char x : s.toCharArray()) {
//x는 투표한 후보로 이루어진 변수를 하나씩 나누는 배열
map.put(x, map.getOrDefault(x, 0)+1);
//map에 후보자 x에 대한 득표수를 넣는다. 아니면 0, 맞으면 +1
}
System.out.println(map.containsKey('F'));
//F라는 키가 존재 여부 반환
System.out.println(map.size());
System.out.println(map.remove('C'));
int max=Integer.MIN_VALUE;
//int의 가장 작은 값을 max에 설정
for(char key : map.keySet()) {
System.out.println(key+" "+map.get(key));
if(map.get(key)>max) {
//max변수와 key의 value 비교 = 득표수 비교
max=map.get(key);
//max 변수에 key를 대입
answer=key;
//회장은 키값 (득표수가 가장 많은후보자)
}
}
return answer;
}
}
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public char solution(int n,String str) {
char x=' ';
char[] arr = str.toCharArray();
HashMap<Character, Integer> map = new HashMap<>();
for(int i=0;i<n;i++) {
map.put(arr[i],map.getOrDefault(arr[i], 0)+1);
}
int max=0;
for(int y:map.values()) {
max=Math.max(y, max);
}
//value로 키 가져오기
for(char key :map.keySet())
{
Integer value=map.get(key);
if(value==max) {
return x=key;
}
}
return x;
}
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.solution(n,str));
}
}
+) 세련된 풀이
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public char solution(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.solution(n,str));
}
}
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n = in.nextInt();
String str = in.next();
Map<Character, Integer> map = new HashMap<>();
for(char c: str.toCharArray()){
map.put(c, map.getOrDefault(c, 0)+1);
}
List<Map.Entry<Character, Integer>> list = new LinkedList<>(map.entrySet());
Collections.sort(list, (o1, o2) -> o2.getValue()==o1.getValue()?o1.getKey()-o2.getKey():o2.getValue()-o1.getValue());
for(Map.Entry<Character, Integer> entry : list){
System.out.println( entry.getKey());
return;
}
}
}
728x90
반응형
'Java > Java 알고리즘 인프런' 카테고리의 다른 글
[Ch.04 - HashTree] 03. 매출액의 종류 # (0) | 2022.05.19 |
---|---|
[Ch.04 - HashTree] 02. 아나그램(해쉬) (+ 삼항연산자) (0) | 2022.05.19 |
[Ch.03 - 투 포인터] 1. 두 배열 합치기 (0) | 2022.05.19 |
[Ch.02 - Array] 12. 멘토링 (0) | 2022.05.19 |
[Ch.02 - Array] 11. 임시반장 정하기 (0) | 2022.05.19 |