Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

학급회장(HashMap) 본문

알고리즘

학급회장(HashMap)

ultra_dev 2023. 3. 27. 17:17

1. 학급 회장(해쉬)

설명

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

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

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

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

입력

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

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

출력

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

예시 입력 1

15
BACBACCACCBDEDE

예시 출력 1

C

📌

Key값 : Character

Value : Integer

ex) A : 3(개)

Map은 객체를 입력으로 사용하는 인터페이스

기본 유형을 일반 인수로 사용할 수 없음

map.get은 key의 value값을 가져온다. 근데 맨처음에는 put을 한번도 안해서 밸류값 없을 수 있으니!

map.getOrDefault(x, 0)로 가져오기 → x의 value값을 가져오되, 없으면 0을 리턴해 그 후에 그 value값에 +1 한다음에 put으로 저장

defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값

getOrDefault 매우 중요한 메소드!!

for(char x : map.keySet()) {} 이렇게 map.keySet하면 존재하는 키 다 탐색함

map.get(x)는 value값 가져오는

.containsKey(’해당 키 ex)A ‘) 하면 해당 키가 있으면 true 없으면 false 리

.size() → 키의 갯수 알려줌 ex) abcdeabcde 있으면 5

.remove(’해당 키 ex)A ‘) 하면 해당 키 삭제

와 return값 char가 아니니까 67이라고 뜨네.. C라고 떠야하는데 조심하자!!

entrySet() 메서드는 key와 value의 값이 모두 필요한 경우 사용하고,

keySet() 메서드는 key의 값만 필요한 경우 사용

import java.util.*;
import java.util.Scanner;

class Main {
    public char solution(int n, String s) { //입력값 조심!! char임 !! char c == int 67

        char answer = ' '; // char 초기화
        HashMap<Character, Integer> map = new HashMap<>(); // 맵은 객체 받으니 int같은거 안됨!!
        for (char x : s.toCharArray()) {
            map.put(x, map.getOrDefault(x, 0) + 1);
        }
//        System.out.println(map.containsKey('F'));  키값 F를 포함하고 있는지 true,false 반환
//        System.out.println(map.size()); 키값 몇개인지
//        System.out.println(map.remove('C')); 키 C 제거
        int max = Integer.MIN_VALUE;
        for (char key : map.keySet()) {
//            System.out.println(key +" "  + map.get(key)); // A 3 B 3 C 5 D 2 E 2

            if (map.get(key) > max) {
                max = map.get(key);
                answer = key;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String str = sc.next();
        System.out.print(T.solution(n, str));
    }
}

'알고리즘' 카테고리의 다른 글

매출액의 종류  (0) 2023.03.29
아나그램(해쉬)  (0) 2023.03.27
최대 길이 연속 부분수열  (0) 2023.02.03
연속된 자연수의 합(two pointers + 수학)  (0) 2023.02.03
연속부분수열  (0) 2023.02.03
Comments