코딩테스트

[프로그래머스 / lv 1] 완주하지 못한 선수 (JAVA_해시)

lyndaa 2023. 3. 16. 10:40

문제


풀이방법

  • 배열
    • 각각 정렬 후 앞에서부터 하나씩 비교하여 다를 경우 리턴
    • 마지막까지 모두 같다면 참여자 배열의 마지막 값을 리턴
  • 해시맵
    • 참여자를 해시맵에 추가하며 value를 하나씩 증가
      • getOrDefault(Object key, V DefaultValue)
        • key : 값을 가져와야하는 요소의 키
        • deaultVaule : 지정된 키로 매핑된 값이 없는 경우 반환되어야하는 기본값
        • 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
        • 중복 처리 가능
    • 완주자를 해시맵에 추가하며 value를 1씩 감소
    • value가 0이 아닌 key값을 리턴

코드

👇🏻 배열

package hashmap_pro;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Solution2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        String str2 = br.readLine();
        String[] arr = str.split(" ");
        String[] arr2 = str2.split(" ");

        Solution2 s = new Solution2();
        System.out.println(s.solution2(arr,arr2));
    }
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        String answer = null;
        for(int i=0; i<completion.length; i++){
            if(! participant[i].equals(completion[i])){
                answer = participant[i];
                return answer;
            }
        }

        answer = participant[participant.length-1];
        return answer;
    }
}

👇🏻 containsKey(Object key) 사용

   public String solution2(String[] participant, String[] completion) {
        Map<String,Integer> map = new HashMap<>() ;
        int i=0;
        String answer = null;
        for( String player : participant) {
            if(map.containsKey(player)) {
                map.put(player, map.get(player)+1);
            }else{
                map.put(player, 1);
            }
        }
        for( String player : completion) {
            map.put(player,map.get(player)-1);
        }
        for(String key : map.keySet()){
            if(map.get(key)!=0){
                answer = key;
            }
        }
        return answer;
    }

👇🏻 getOrDefault(Object key, V DefaultValue) 사용

public String solution3(String[] participant, String[] completion) {
        Map<String,Integer> map = new HashMap<>() ;
        int i=0;
        String answer = null;
        for( String player : participant) {
            map.put(player, map.getOrDefault(player,0)+1);
        }
        for( String player : completion) {
            map.put(player,map.get(player)-1);
        }
        for(String key : map.keySet()){
            if(map.get(key)!=0){
                answer = key;
            }
        }
        return answer;
    }