본문 바로가기

서버 개발

[JAVA] HashMap 기본을 활용하여 코딩테스트 문제 풀어보기

반응형

 

 

 

이번에 코딩테스트를 하면서 중복값에 관련한 문제를 풀게 되었다.

중복값 하면 'HashMap' 을 쓰면 코드 수 를 줄이고 문제를 풀 수 있을 것같다.

 

이번에는 문제를 풀어보면서 HashMap을 쓰는 법을 포스팅해보려한다.

 

HashMap은 그냥 쓴다고 하면 쓸 수 있지만 문제를 풀기위해서는 값을 알아야 하므로 간단하게 정리한 아래 코드를 보면 쉽게 사용할 수 있다.

 

지금 당신이 코딩테스트 중 이라면 아래 내용을 조금만 집중해서 보고 활용하면 금방 풀 수 있다!

 

 


1. HashMap 만들기 

 

 

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
31
32
33
package 해시맵;
 
import java.util.*;
 
public class Main {
 
    static HashMap<String, Integer> map = new HashMap<String, Integer>();
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        String s;
        while((s=sc.nextLine()) != null) {
            if(map.containsKey(s)) {
                int temp = map.get(s);
                map.put(s, temp+1);
            }else {
                map.put(s, 1);
            }
            System.out.println(map.size());
            Set set = map.entrySet();
            Iterator it = set.iterator();
            while(it.hasNext()) {
                Map.Entry e = (Map.Entry)it.next();
                System.out.println("이름: "+e.getKey()+"갯수: "+e.getValue());
              
            }
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

 

 


우선 위의 코드를 한줄 씩 살펴 보자!

  static HashMap<String, Integer> map = new HashMap<String, Integer>();

 

는 HashMap을 생성하는 것이다 <String, Integer> 에서 String은 key, Integet 는 value 이다.

 

 

 


메인 으로 가서

 while((s=sc.nextLine()) != null) {

            if(map.containsKey(s)) {

                int temp = map.get(s);

                map.put(s, temp+1);

            }else {

                map.put(s, 1);

            }

코드를 보면 while((s=sc.nextLine()) != null) 내가 입력을 할 때마다 2가지 조건을 준다.

이 부분은 본인이 입력값을 컨트롤 하면 되는 부분! 미리 입력을 받아서 for문을 돌려도 된다.

 

 


map.containsKey(s) => IF문 안에 있는 containsKey 는 이미 값이 있으면 true, 없으면 false를 주기 때문에 있을때와 없을때를 구분하기 위하여 썻다.

 

 


그다음 map.put(s, 1); 을 알아보자. 

put은 값을 넣는 함수이므로 s 는 Key, 1은 처음 들어가기 때문에 1 값을 지정해서 준것이다.

s 같은 경우에는 ant, bee, daragonfly 같은 벌레가 될 수 도 있다.

 


 

  int temp = map.get(s);

                map.put(s, temp+1);

 

이 부분은 만약 이미 key 값이 있다면 키의 value를 가져와서 1을 추가하는것이다. 즉 중복이 있다면 key만 올리는것 

map.get(s)는 s라는 키의 value값을 가진다는 것을 알 수 있다.

 


그 다음 사이즈 알기!

 

 System.out.println(map.size());

map.size() 는 key의 갯수라고 생각하면 편하다.

 

 


이제 HashMap 에서 가장 중요한 부분이다.

Set set = map.entrySet();

Iterator it = set.iterator();

    while(it.hasNext()) {

         Map.Entry e = (Map.Entry)it.next();

          System.out.println("이름: "+e.getKey()+"갯수: "+e.getValue());

 

이 코드를 보면 의아 할 수 가 있다. Map자체로 반복문을 돌려서 값을 보여주는게 아니라 

Set, Iterator를 사용하여 값을 추출하고  Map.Entry 까지 사용하게 된다.

어려우면 그냥 복붙으로 사용하면 간편..ㅎ

이게 HashMap을 쓸 때 가장 힘든 부분인데 간단하게 이해만 하면 편리하게 쓸 수 있다고 생각한다.

 

위와 같을때 결과 값을 보면

 

 

 

 

위의 코드를 활용하면 간단하게 HashMap을 사용하여 구현이 가능하다.

활용한다면 여러 코딩테스트에 나오는 문제들도 조금만 변형하여 풀 수도 있다.