[프로그래머스][Java] 완주하지 못한 선수 (Lv.1) - 해시

박현아·2024년 10월 26일
0

programmers-java

목록 보기
23/35

👩‍💻 문제

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

🙋‍♀️ 답변

import java.util.HashMap;
import java.util.Map;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String, Integer> map = new HashMap<>();
        
        // 각 참여자 이름을 카운트
        for (String name : participant) {
            map.put(name, map.getOrDefault(name, 0)+1); // 이름이 있으면 값 반환+1, 없으면 0 반환+1
        }
        
        // completion 배열에 있을 경우 카운트 -1
        for (String name : completion) {
            map.put(name, map.get(name)-1);
        }        
        
        // 카운트가 1인 참가자 찾기
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            if (entry.getValue() == 1) {
                answer = entry.getKey();
            }
        }
        
        return answer;
    }
}

🤔

처음에 HashMap<String, String> map = new HashMap<>(); 으로 해시맵 만들어서
key: 이름, value: participant랑 completion으로 해서 마지막에 value가 participant인 경우로 답을 냈는데 동명이인인 경우에 처리를 못했다.!!!

key: 이름, value: 배열에 있으면 +1을 하고 completion 배열에 있을 경우 -1을 해서 완주한 사람일 경우 value가 0이 되도록 했다. 이 경우에는 동명이인이더라도 나중에는 결국 0이나 1이 되기 때문에 동명이인이 있는 경우에도 적용이 가능했다.

HashMap을 어제 처음 코테 공부를 하며 써봤는데,,,,,,,😱 어렵지만 감이 잡히는 것 같기도하지만 어렵다 ㅋ.ㅋ 관련 문제 더 풀어봐야 손에 익을 것 같다 !!!!!

내가 어려웠던 부분은 ⬇️

// 각 참여자 이름을 카운트
for (String name : participant) {
	map.put(name, map.getOrDefault(name, 0)+1); // 이름이 있으면 값 반환+1, 없으면 0 반환+1
}

여기에서 .getOrDefault() 부분 ! 따로 정리를 해놔야겠다. (.getOrDefault() 정리 완료)

그리고 여기 ⬇️

// 카운트가 1인 참가자 찾기
for (Map.Entry<String, Integer> entry : map.entrySet()) {
	if (entry.getValue() == 1) {
		answer = entry.getKey();
	}
}

Map.Entry 뭐시기하는 걸 처음 봤는데 아직 이해가 잘 안간다. map.entrySet()을 하면 키값과 value값을 같이 가져올 수 있다 까지만 이해가 갔다. 이 부분도 따로 정리해놔야겠다. (Map.Entry 정리 완료)

0개의 댓글