완주하지 못한 선수

Heeeoh·2023년 3월 19일
0

프로그래머스

목록 보기
13/26
post-thumbnail

🔍문제 분석

✔️ 출처

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

📖 문제


맵을 사용하여 key에 사람이름 , value에 수를 넣는다.
participant의 모든 이름을 key로 넣고 value에 +1해주고 completion의 모든 이름을 뺀다. value -1한다.
value가 0이 아닌사람이 낙오자다.

🔅 문제풀이

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {

        HashMap<String, Integer> player = new HashMap<>();
        StringBuilder sb = new StringBuilder();

        for(String all : participant){
            int tmp = player.getOrDefault(all,0) + 1;
            player.put(all, tmp);
        }

        for(String win : completion){
            int tmp = player.getOrDefault(win,0) - 1;
            player.put(win, tmp);
        }

        player.forEach((key,value) -> {
           if(value == 1){
               sb.append(key);
           } 
        });

        return sb.toString();
    }
}
    

map에서 forEach문을 람다식으로 처음 써봤다. 괜찮은것 같다.

🔅 다른사람들의 풀이를 참고한 풀이


import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {

        HashMap<String, Integer> player = new HashMap<>();
        String answer = "";

        for(String all : participant){
            int tmp = player.getOrDefault(all,0) + 1;
            player.put(all, tmp);
        }

        for(String win : completion){
            int tmp = player.getOrDefault(win,0) - 1;
            player.put(win, tmp);
        }

        for(String key : player.keySet()) {
            if(player.get(key) != 0){
                answer = key;
            }
        }

        return answer;
    }
}

밑에 keySet과 get을 사용하는 부분을 참고해서 써봤다. 테스트 5빼곤 훨씬 빠르다.

❗ 오답노트 / 필요한 지식

  1. 효율적인 코드 짜기에 노력해야겠다. 뭐가 더 빠른지 어떤경우엔 무슨 메소드를 써야하는지 공부할 필요가 있다.
profile
열심히 살자

0개의 댓글