λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

[해쉬] 1. ν•™κΈ‰ 회μž₯

μ‹œνλ¦¬ν‹°μ§€ν˜Έ 2023. 12. 30.
1. ν•™κΈ‰ 회μž₯(해쉬)
 

μ„€λͺ…

ν•™κΈ‰ 회μž₯을 λ½‘λŠ”λ° ν›„λ³΄λ‘œ 기호 A, B, C, D, E 후보가 등둝을 ν–ˆμŠ΅λ‹ˆλ‹€.

νˆ¬ν‘œμš©μ§€μ—λŠ” 반 학생듀이 μžκΈ°κ°€ μ„ νƒν•œ ν›„λ³΄μ˜ 기호(μ•ŒνŒŒλ²³)κ°€ μ“°μ—¬μ Έ 있으며 μ„ μƒλ‹˜μ€ κ·Έ 기호λ₯Ό λ°œν‘œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ„ μƒλ‹˜μ˜ λ°œν‘œκ°€ λλ‚œ ν›„ μ–΄λ–€ 기호의 후보가 ν•™κΈ‰ 회μž₯이 λ˜μ—ˆλŠ”μ§€ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

λ°˜λ“œμ‹œ ν•œ λͺ…μ˜ ν•™κΈ‰νšŒμž₯이 μ„ μΆœλ˜λ„λ‘ νˆ¬ν‘œκ²°κ³Όκ°€ λ‚˜μ™”λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

μž…λ ₯

첫 μ€„μ—λŠ” 반 ν•™μƒμˆ˜ N(5<=N<=50)이 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

두 번째 쀄에 N개의 νˆ¬ν‘œμš©μ§€μ— μ“°μ—¬μ Έ 있던 각 ν›„λ³΄μ˜ κΈ°ν˜Έκ°€ μ„ μƒλ‹˜μ΄ λ°œν‘œν•œ μˆœμ„œλŒ€λ‘œ λ¬Έμžμ—΄λ‘œ μž…λ ₯λ©λ‹ˆλ‹€.

좜λ ₯

ν•™κΈ‰ 회μž₯으둜 μ„ νƒλœ 기호λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ μž…λ ₯ 1 

15
BACBACCACCBDEDE

μ˜ˆμ‹œ 좜λ ₯ 1

C

 

 

<<풀이>>

 

-λ‚˜μ˜ 풀이-

 

μ‹œκ°„λ³΅μž‘λ„ : O(N)

 

일단 HashMapμ΄λΌλŠ” 것을 ν™œμš©ν–ˆλ‹€. 이 κ°œλ…μ— λŒ€ν•΄μ„œλŠ” κ³΅λΆ€ν•œ 적이 μžˆμ–΄ μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€λŠ” μ–΄λŠμ •λ„ νŒŒμ•…ν•˜κ³  μžˆμ§€λ§Œ λͺ…ν™•ν•˜κ²Œ κΈ°μ–΅ν•˜κ³  μžˆμ§€λŠ” λͺ»ν•΄μ„œ λ‹€μ‹œ 곡뢀할 ν•„μš”κ°€ μžˆλ‹€. λ©”μ„œλ“œμ™€ μ •ν™•ν•˜κ²Œ HashMap이 무엇인지 κ°•μ‚¬λ‹˜ 풀이λ₯Ό λ³΄λ©΄μ„œ νŒŒμ•…ν•˜μž.

 

λ‚˜μ˜ ν’€μ΄λŠ” μ–΄μ§Έμ–΄μ§Έ 정보λ₯Ό μ°Ύκ³ ν•΄μ„œ 정닡을 λ§žμ·„λ‹€.

 

constainsKey와 ν•΄μ‰¬λŠ” 쀑볡값을 ν—ˆμš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 같은 값이 λ“€μ–΄μ˜€λ©΄ λŒ€μ²΄ λ˜λŠ” 것을 μ΄μš©ν–ˆλ‹€.

 

그리고, κ°€μž₯ μ΅œλŒ€ 값을 κ°€μ§€κ³  μžˆλŠ” char을 κ°€μ Έμ˜¬ λ•Œ keySet()λ©”μ„œλ“œλ₯Ό ν™œμš©ν•΄μ„œ κ΅¬ν–ˆλ‹€.

import java.util.*;

class Main {

    public char solution(int n, String chairman) {
        HashMap<Character, Integer> map = new HashMap();
        int max = 0;
        for(char x : chairman.toCharArray()) {
            if(map.containsKey(x)) {
                map.put(x, map.get(x) + 1);
            } else {
                map.put(x, 1);
            }
        }
        char answer = ' ';
        for(char a : map.keySet()) {
            max = Math.max(max, map.get(a));
        }

        for (char a : map.keySet()) {
            if(map.get(a) == max) {
                answer = a;
            }
        }

        return answer;
    }


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

 

-κ°•μ‚¬λ‹˜ 풀이-

 

μ‹œκ°„ λ³΅μž‘λ„ : O(N)

import java.util.*;

class Main {

    public char solution(int n, String chairman) {
        HashMap<Character, Integer> map = new HashMap();
        int max = 0;
        char answer = ' ';
        for(char x : chairman.toCharArray()) {
            map.put(x, map.getOrDefault(x,0) + 1);
        }
        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 in = new Scanner(System.in);
        int n = in.nextInt();
        String chairman = in.next();
        System.out.println(T.solution(n, chairman));
    }
}

 

μΊ¬ ~ getOrDefault(x, 0) μ΄λΌλŠ” λ©”μ„œλ“œμ— λ¬΄λ¦Žμ„ νƒμΉ˜κ³  κ°„λ‹€. μ €λ ‡κ²Œ ν•˜λ©΄ keyκ°€ μ‘΄μž¬ν•˜λ©΄ κ·Έ key의 value 값을 κ°€μ Έμ˜€κ³  μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 0으둜 μ΄ˆκΈ°ν™” ν•œλ‹€. 

이λ₯Ό ν™œμš©ν•΄μ„œ ν•˜λ©΄ 쑰금 더 μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ 적을 수 μžˆλ‹€.

 

<<μΆ”κ°€ 곡뢀>>

 

map.get() // νŠΉμ • keyκ°’μ˜ value λ°˜ν™˜

map.getOrDefault() //key값이 μ‘΄μž¬ν•˜λ©΄ κ·Έ κ°’μ˜ valueλ°˜ν™˜, μ—†λ‹€λ©΄ 0으둜 λ°˜ν™˜

map.keySet() //map이 κ°€μ§€κ³  μžˆλŠ” keyκ°’ λ‚˜μ—΄

map.size() //map의 크기

map.remove('C') //map에 μžˆλŠ” keyκ°’ Cλ₯Ό μ œκ±°ν•˜κ³   C의 valueλ₯Ό λ°˜ν™˜ map.size() λ‹€μ‹œ 해보면 1 κ°μ†Œ

 

λŒ“κΈ€