본문 바로가기

알고리즘/인프런

섹션 4. HashMap, TreeSet (해쉬, 정렬지원 Set) 1. 학급 회장

문제

  • 학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다.
  • 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다.
  • 선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요.
  • 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다.

입력

  • 첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다.
  • 두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 입력됩니다.

출력

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

입출력 예제


풀이방식

이번 문제는 HashMap 을 사용하여 푸는 문제이다.


설계과정

1. HashMap을 통해 Key와 Value로 나누어 각 값들을 저장한다.

2. 가장 많이 나온 기호를 출력한다.


풀이과정

1. 학생 수 N과 투표용지에 적힌 기호 str 을 입력받는다.

2. char 로 리턴받을 것이기에 char 형으로 메소드를 작성한다.

3. HashMap를 선언한다.

4. x와 str.toCharArray() 를 비교해서 찾으려하는 key 값이 있으면 1을 더해서 반환한다.


아래 과정을 통해 자세히 이해해보자.

먼저, 기존에 존재하는 HashMap 배열은 아래와 같다.

x에 B 라는 값이 들어갔다고 가정했을때에 결과는 아래와 같다.

x에 E라는 값이 들어갔다고 가정했을때에 결과는 아래와 같다.


  • toCharArray() : str에 입력된 문자열을 문자 하나씩 분리해서 문자 배열을 생성한다.
  • map.put() : Key와 Value 값을 HashMap에 넣는다. 만약 키 값이 없으면 생성한다.
  • map.getOrDefault(Key 값, Default 값) : 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메소드이다.

5. keySet()을 통해 키 값을 찾고, get()을 통해 키에 해당하는 값을 찾아 최대값을 비교한다.

  • map.keySet() : Map에 저장되어있는 키(Key)들을 반환하는 메소드이다.
  • map.get() : Map에 저장되어있는 Value 들을 반환하는 메소드이다.

 


해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.