완주하지 못한 선수

_021119·2021년 4월 13일
0

알고리즘

목록 보기
3/9
public static String solution(String[] participant, String[] completion) {
		String answer = "";
		HashMap<String,Integer> hm = new HashMap<>();

		for(int i = 0; i< participant.length; i++) {

			if(hm.get(participant[i]) == null){
				hm.put(participant[i], 1);
			//hashmap에 해당 키값이 존재하지 않는 경우, add;
           		//hm.put(participant[i], hm.getOrDefault(player, 0)+1);
			}else {
				hm.put(participant[i], hm.get(participant[i])+1);
                //hashmap에 해당 키값이 존재하는 경우, 기존 키의 value값에 1을 더해서 add
			}
		}

		for(String c : completion) {
			//완주한 선수가 hm의 키값으로 존재 할 경우, value값에서 -1 해준다;
			if(hm.containsKey(c)){   //hm.get(c) != 0 경우로 해도 됨.
				hm.put(c, hm.get(c)-1);
			}
		}
		//결국, value가 0인 사람은(참가자-완주자) 완주를 하였고, value가 1이면 완주하지 못한 선수 이다.
		for(String k : hm.keySet()) {
			if(hm.get(k) != 0) {
				answer = k;
			}
		}

       return answer;

    }

HashMap을 이용하여 푼다.

hashMap생성 후 참가자 이름(participant[i])이 hashmap에 존재하지 않는 경우 무조건 add. 단, value값은 +1 을 하여 count해준다.

hashMap에 참가자 이름이 존재 할 경우, 이미 존재하는 key값(참가자이름)에 해당하는 value 값을 불러와 +1 해준다.

완주한선수이름이 hashMap에 존재하는지 확인 한 후, 존재할 경우 해당 key값(완주한선수)의 value값을 가져와 -1 해준다.

결론적으로, 참가한 선수 (+1) 중 완주를 한 선수 (-1)는 value 값이 0이 된다.

0이 아닌 선수는 동명이인 이거나, 완주를 하지 못한 선수 이다.

HashMap : 동일한 key값이 추가 될 경우 새로 add되는 값으로 덮어쓰워진다. 중복 불가능. 순서 없음.

  • hashMap.keySet() ;   :  key값들만 불러올 수 있다.
  • hashMap.entrySet() :  key +  value값을 불러올 수 있다.
  • hashMap.get(key) : key 값을 통한 value값을 가져온다
  • hashMap.containsKey() :  key값이 있는지 조회.
  • hashMap.containsValue() : value 값이 있는지 조회.
  • hashMap.getOrDefault(key,default) : 지정된 key값에 mapping된 값을 반환한다. 없을 경우 default값을 반환.

다른사람의 풀이!!!!!!!!!!

public String solution(String[] participant, String[] completion) {
        String answer = "";

        HashMap<String, Integer> hm = new HashMap<>();

        for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
        for (String player : completion) hm.put(player, hm.get(player) - 1);

        for (String key : hm.keySet()) {
            if (hm.get(key) != 0){
                answer = key;
            }
        }
        return answer;
    }
profile
내가 정리하고 싶어서 쓰는 로오그

0개의 댓글