본문 바로가기
코딩테스트/프로그래머스

[프로그래머스] 해시 : 완주하지 못한 선수

by 일상 속 둔치 2020. 8. 9.

프로그래머스 유형별 문제 중 해시에 해당하는 문제이다.

 

이번 게시글을 통해 Java에서 HashMap의 사용법도 같이 포스팅하려고 한다!

 

이 문제를 보면 HashMap에 대한 사용법을 많이 익힐 수 있어서 아주 좋다~

 

우선 문제 답안 코드를 먼저 보자

 

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
        
        // 참가자 카운팅
        for(String startPlayer : participant){
            hashMap.put(startPlayer,hashMap.getOrDefault(startPlayer, 0)+1);    
        }
        
        // 완주자 카운팅
        for(String endPlayer : completion){
            hashMap.put(endPlayer,hashMap.get(endPlayer)-1);
        }
        
        // 완주 못한 사람 찾기
        for(Map.Entry<String, Integer> entry : hashMap.entrySet()){
            if(entry.getValue() != 0){
                answer = entry.getKey();
                break;
            }
        }
        
        return answer;
    }
}

문제 풀이를 간단히 해보자면

 

participant(참가자)를 HashMap에 저장한다.

 

이때, 동명이인이 있으므로 단순히 있다 없다가 아니라 카운팅을 통해 처리를 해주자.

 

그리고 completion(완주자)를 체크할 때 1씩 카운트를 빼줄 것이다.

 

이때 count가 0이 아니라면! 완주를 못한것이므로 알 수 있다.

 

완주자 카운팅이 끝나고 나면 HashMap에서 count가 0이 아닌 사람을 찾고 출력해준다!

 

이제 아래에서 HashMap의 사용법에 대해서 알아보자!

 

import java.util.HashMap;

// HashMap 객체 선언 <Key Type, Value Type>
HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
String Key = "key";
int value = 0;

// Value 저장
hashMap.put(key,value);

// Key 불러오기
int getValue = hashMap.get(key);

// Key 불러오기, Key가 존재하지 않으면 기본값 return
int getValue = hashMap.getOrDefault("unexistKey",100);

// Value 바꾸기
int beforeValue = hashMap.value(key,1);

// Key 존재여부 확인
boolean flag = hashMap.containsKey(key);

// Key 삭제
hashMap.remove(key);

// Key Set, Key들의 집합
Set set = hashMap.keySet();

// for문으로 set 검사
for(String key : set){
	String value = hashMap.get(key);
}

// iterator로 검사
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
	String newKey = iterator.next();
    String newValue = hashMap.get(newKey);
}

// EntrySet, <Key,value>의 집합
Set<Map.Entry<String, Integer>> entrySet = hashMap.entrySet();

// for문으로 entry set 검사
for(Map.Entry<String, Integer> entry : entrySet){
	String key = entry.getKey();
    int value = entry.getValue();
}

// iterator로 검사
Iterator<String> iterator = entrySet.iterator();
while(iterator.hasNext()){
	Map.Entry<String, Integer> entry = (Map.Entry<String,Integer>)iterator.next();
    String key = entry.getKey();
    int value = entry.getValue();
}

댓글