티스토리 뷰

문제 링크

완주하지 못한 선수

문제 조건

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

변수 설명

  • 매개변수
    • participant : 마라톤 참여한선수들의 이름이 담긴 배열
    • completion : 완주한 선수들의 이름이 담긴 배열
  • hm : 완주하지 못한 선수를 찾기 위한 HashMap<String, Integer>

코드 설명

for(String part : participant)
    hm.put(part, hm.getOrDefault(part, 0) + 1);           
  • participant를 HashMap, hm에 넣어줍니다.(put)
    • key에 participant를 넣어줍니다.
    • value에 getOrDefault를 사용하여 key에 해당하는 value값이 존재하면 value+1, 존재하지 않으면 1을 넣어줍니다.
for(String comp : completion)
    hm.put(comp, hm.get(comp) - 1);
  • completion을 hm의 key값과 비교해줍니다.
    • completion을 key로 갖는 value를 1씩 빼줍니다.
for(Map.Entry<String, Integer> entry : hm.entrySet()) {
    String player = entry.getKey();
    int value = entry.getValue();
    if(value == 1){
        answer = player;
        break;
    }
}
  • value가 1인 key(player)값을 return해줍니다.

배운 점

  • getOrDefault를 사용하여 코드 리펙토링을 실시하였습니다.
  • keySet하고 get하는 방법은 비효율적인 방법입니다 : HashMap을 두 번 체크하기 때문!
    • 그렇기 때문에 entrySet을 이용하여 key와 value를 한 번에 받아왔습니다.

문제 해답


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

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> hm = new HashMap();

        for(String part : participant)
            hm.put(part, hm.getOrDefault(part, 0) + 1);           
        for(String comp : completion) {
            hm.put(comp, hm.get(comp) - 1);
        }
        for(Map.Entry<String, Integer> entry : hm.entrySet()) {
            String player = entry.getKey();
            int value = entry.getValue();
            if(value == 1){
                answer = player;
                break;
            }
        }
        return answer;
    }
}
public class Main {
    public static void main(String[] args) {
        Solution Test = new Solution();
        String[] p = {"leo", "kiki", "eden"};
        String[] c = {"eden", "kiki"};
        int answer = Test.solution(p,c);
        System.out.println(answer);
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함