[프로그래머스 고득점 Kit] 완주하지 못한 선수

김가희·2023년 3월 3일
0

PS

목록 보기
2/4

[Hash 2일차] 완주하지 못한 선수

⬇️ 나의 코드 v1 ⬇️(JAVA)

import java.util.HashMap;
import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        
        String answer = "";
        
        HashMap<String, Integer> people = new HashMap<String, Integer>();
        
        Arrays.stream(participant)
            .forEach(p -> {people.put(p, people.containsKey(p) ? people.get(p) + 1 : 1);});
        
        Arrays.stream(completion)
            .forEach(p -> {if(people.get(p).equals(1)) people.remove(p); else people.put(p, people.get(p) - 1);});
        
        for(String s : people.keySet()) answer = s;
        
        return answer;
    }
}

이 코드는 어제 배운 stream을 써보고 싶어서 쓴 코드이다.

⬇️ 나의 코드 v2 ⬇️(JAVA)

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        
        String answer = "";
        
        HashMap<String, Integer> people = new HashMap<String, Integer>();
        
        for(String p : participant) people.put(p, people.containsKey(p) ? people.get(p) + 1 : 1);
        for(String p : completion) {
            if(people.get(p).equals(1)) people.remove(p); 
            else people.put(p, people.get(p) - 1);
        }
        
        for(String s : people.keySet()) answer = s;
        
        return answer;
    }
}

좀 더 읽기쉽게 풀었다. 방법은 v1, v2 둘 다 동일하다.
먼저 참가자들의 이름으로 <이름, 사람 수(동명이인수)> HashMap을 생성하고
완주자들을 순회하며 map에서 사람수를 줄여나갔다. 만약 0명일 경우 아예 지우도록 한다. 마지막 남은 key가 정답이다.

👀 다른 사람의 코드를 보고 알게된 것

  1. p, people.containsKey(p) ? people.get(p) + 1 : 1 보단 getOrDefault(key, defalut)사용하기!

코드가 훨씬 간결해진다.

  1. () -> {} 괄호로 안묶어주니 오류난다...

이번에는 푸는 방법이나 그런것 보다는 stream 을 배우고 적용하는것에 초점을 뒀다.

profile
안드로이드 개발자

0개의 댓글