프로그래머스 완주하지 못한 선수 in Java

라따뚜이·2021년 10월 19일
0

프로그래머스

목록 보기
1/1

해당 문제 링크

참조한 블로그

참조한 블로그와 차이점이 있다면 keySet을 사용하지 않고 entrySet을 사용했다는 점입니다.
사용 이유는 아래 주석을 참조하시면 됩니다.

public static String solution(String[] participant, String[] completion) {
		String answer=null;
		
		HashMap<String, Integer> hm = new HashMap<String,Integer>();
		
		//참가자의 key : value 테이블을 만든다. value값에 1로 바꾼다.
		for(String player : participant)
			hm.put(player, hm.getOrDefault(player, 0)+1);
		
		//완주한 참가자의 value값을 -1해준다
		for(String player : completion)
			hm.put(player, hm.getOrDefault(player, 0)-1);
		
		//완주하지 못한 참가자는 value값이 1이므로 반복문과 조건문으로 필터링하여 리턴해준다.
		//EntrySet을 이용하여 hashmap값을 set값으로 반환
		//entrySet()을 이용하면 맵의 모든 쌍을 반복할 때 keySet()에 비해 entrySet()의 성능이 훨씬 더 좋다~
		
		for(Entry<String, Integer> key : hm.entrySet()) {
			if(key.getValue() != 0) {
				answer = key.getKey();
				break;
			}
		}
		return answer;
	}
	
	public static void main(String[] args) {
		String [] participant = {"mislav", "stanko", "mislav", "ana"};
		String [] completion = {"stanko", "ana", "mislav"};
		String s = solution(participant, completion);
		
		System.out.println(s);
	}

이 문제를 풀면서 몰랐던 메서드에 대해 간략히 정리하려고 합니다.

getOrDefault()입니다. 해당 메서드를 잘 정리한 블로그 분들 덕에 잘 이해할 수 있었습니다.

물론 docs도 확인했습니다. 아래는 docs에서 발췌했습니다.

default V getOrDefault(Object key,  V defaultValue)
                     
Returns the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key.

저는 이렇게 이해했습니다.

첫 번째 파라미터에 찾고자 하는 key를 넣어줍니다.

key와 매핑되어 있는 value가 없다면 default값을 반환하는데요 그 default값을 지정하는 게 두 번째 파라미터입니다.

있다면 key와 매핑된 value값이 리턴되겠죠??

아래 코드를 보시면
hm.put(player, hm.getOrDefault(player, 0)+1); 이렇게 코드를 작성한다면
아래 표처럼 된다고 생각하시면 편하실 겁니다.

keyvalue
mislav1
stanko1
mislav1
ana 1

여기서 완주한 참가자의 value를 -1을 합니다.

hm.put(player, hm.getOrDefault(player, 0)-1);

그러면 아래 표처럼 mislav가 0이됩니다.

keyvalue
mislav0
stanko1
mislav1
ana 1





처음 쓰는 게시글이기도 하고, 부족한 점이 너무 많아 제가 쓴 글에 틀린 점이 있을 수 있습니다. 틀린 점 너그럽게 봐주시고 피드백 주시면 감사하겠습니다.

profile
돈만 준다면 해 노예

0개의 댓글