반응형

 

설명

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

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

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

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

 

입력

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

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

 

출력

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

예시 입력 1 

15
BACBACCACCBDEDE

 

예시 출력 1

C

 


 

접근 방법

우선, 입출력 될 값들을 구분한다.

입력 : n (HashMap key의 개수), str(HashMap key의 값)

출력 : HashMap의 value 중에서 가장 큰 값(max)

 

 

import java.util.*;
 
class Main{
	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[]) {
		
		Scanner sc = new Scanner(System.in);
		Main T = new Main();
		int k = sc.nextInt();
		String str = sc.next();
		System.out.println(T.solution(k, str));
	}		
}

 


HashMap에 대한 간단한 분석

해쉬맵은, 자바의 Map 인터페이스의 구현체 중 하나이다. 그래서 Map의 특성인 key : value 특성을 그대로 가지고 온다.

 

위 그림과 같이 HashMap은 내부에 키와 값을 저장하는 자료 구조를 가지고 있다. 해시 함수를 통해 키와 값이 저장되는 위치를 결정하므로, 그 위치를 알 수 없고 삽입되는 순서와 들어 있는 위치 또한 관계가 없다.

(삽입한 순서에 따라 정렬되지 않는다.)

 

알고리즘 문제를 풀 때, HashMap 자료구조를 사용하며 자주 사용되는 함수들이 몇 가지 있다. 간단하게 정리해보자.

get(), getOrDefault(), keySet()

 

get() 함수

get()함수는 매개변수(괄호안에)의 value 값을 찾아서 출력한다.

 

HashMap<Character, Integer> map = new HashMap<>();
map.put('A', 1);
map.put('B', 2);
map.put('C', 3);
map.put('D', 4);
map.put('E', 5);

System.out.print(map.get('A'));
System.out.print(map.get('B'));
System.out.print(map.get('C'));
System.out.print(map.get('D'));
System.out.print(map.get('E'));

// 12345 출력

 

getOrDefault()함수

이 함수는 알고리즘을 풀 때 빈도가 높은 함수니까 잘 봐두는 것을 권장한다. 

getOrDefault는 HashMap의 key가 있으면 그  키의 value를 가져오고, key가 없으면 무엇을 반환할지 사용자가 설정할 수 있다.

HashMap<Character, Integer> map = new HashMap<>();
for(char x : s.toCharArray()) {
    map.put(x, map.getOrDefault(x, 0) + 1);	//key가 있으면 value를 반환하고, 없으면 0을 반환한다. 그리고 + 1 을 하여 카운팅
}

for(char key : map.keySet()) {
    System.out.println(key + " " + map.get(key));
}

// 아래와 같은 값 출력
A 3
B 3
C 5
D 2
E 2

 

여기서, getOrDefault(x, 0) + 2 를 한다면, value의 값들이 1씩 증가해서 나올 것이다.

또한, getOrDefault(x, 1) + 1 를 한다면, key값이 없을 때 0이 아닌 1을 반환하여 나온다.

 

keySet() 함수

keySet() 함수는 HashMap에 저장되어 있는 key 값을 출력해준다.

HashMap<Character, Integer> map = new HashMap<>();
    
map.put('A', 1);
map.put('B', 2);
map.put('C', 3);
map.put('D', 4);
map.put('E', 5);

for(char key : map.keySet()) {
    System.out.print(key + " ");
}

// A B C D E 출력

 

 

 


이 글의 문제는 인프런 강의에서, HashMap에 대한 분석은 아래 블로그에서 참고하였습니다.

 

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%ED%85%8C%EB%8C%80%EB%B9%84/dashboard

 

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 - 인프런

자바(Java)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 코딩테스트에서 가장 많이 출제되는 Top 10 Topic을 다루고 있습니다. 주제와 연동하여 기초문제부터 중급문제까지 단계적으로 구성

www.inflearn.com

https://lordofkangs.tistory.com/78

 

[자료구조] HashMap 파헤치기 1 (Linked List + Red Black Tree)

나는 HashMap이 잘 이해되지 않았다. 인덱스가 없으니 배열이나 List에 비해 확실히 더 어렵고 직관적으로 이해하기가 힘들었다. 그래서 오늘 HashMap 자료구조가 어떤 원리로 돌아가는지 파헤쳐볼까

lordofkangs.tistory.com

https://velog.io/@db_jam/Java-%ED%95%B4%EC%8B%9C%EB%A7%B5HashMap-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%A0%95%EB%A6%AC

 

[Java] 해시맵(HashMap) 자료구조 정리

해시맵은 이름 그대로 해싱(Hashing)된 맵(Map)이다. 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보인다.

velog.io

 

반응형

+ Recent posts