완주하지 못한 선수

채종윤·2023년 8월 12일
0

📔 문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/42576


📝 문제 풀이

1. HashMap과 HashSet의 차이

1)HashMap

HashMap은 중복 Key 값을 허용하지 않지만, 중복 Value 값은 허용

ex) {'a': 1, 'b': 1, 'c': 2}

HashMap은 put() 메서드를 사용하여 데이터를 삽입하는데, Key-Value 쌍 데이터의 형태를 저장하기 때문에 삽입 연산 동안 단 하나의 객체가 생성된다.


HashSet은 객체 자체를 데이터로 저장하기 때문에 중복을 허용X
ex) {'a', 'b', 'c'}

HashSet은 add() 메서드를 사용하여 데이터를 삽입하는데,
객체 그 자체를 저장하고 내부적으로 HashMap을 사용하기 때문에 삽입되는 객체(Key값)와 dummy 객체(Value 값), 총 두 개의 객체가 삽입 연산 동안 생성된다.

2) 코드 해석

for(String player : participant){
            map.put(player,map.getOrDefault(player,0)+1);
        }


: 위와 같은 그림처럼 player를 key로 사용, getOrDefault는 player가 없으면 0을 반환
player가 있으면 player value를 반환

for(String player:completion){
            map.put(player,map.get(player)-1);
        }

: 값을 넣을때 기존 player의 value를 가져와 -1을 해준다 ( 완주했으면 -1)

결론은 value가 0이 아닌 마지막 주자를 찾는다.

 for(String key: map.keySet())

map.keySet()을 사용하면 {leo,eden,kiki}반환


💡 내 코드

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
   String answer = "";
        HashMap<String,Integer> map = new HashMap<>();
        
        for(String player : participant){
            map.put(player,map.getOrDefault(player,0)+1);
        }
        for(String player:completion){
            map.put(player,map.get(player)-1);
        }
        for(String key: map.keySet()){
            if(map.get(key)!=0){
                answer =key;
                break;
            }
        }
        return answer;
    }
}
profile
안녕하세요. 백앤드 개발자를 목표로 하고 있습니다!

0개의 댓글