TIL | [알고리즘] 완주하지 못한 선수(Java)

hyemin·2022년 3월 14일
0

알고리즘

목록 보기
20/38
post-thumbnail

THINKING

  1. 배열 participant와 배열 completion을 정렬해준다 -Arrays.sort(participant), Arrays.sort(completion)
  2. 배열을 돌면서 !participant[i].equals(completion[i])인 인덱스를 찾는다
  3. 찾으면 break후 participant[i]를 return해준다

내 풀이

import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        // String answer = "";
        Arrays.sort(participant); 
        Arrays.sort(completion); 
        
        int i;
        for(i = 0; i < completion.length; i++) {
            if (!participant[i].equals(completion[i])) {
                break;
            }
        }
        return participant[i];
    }
}

좋아요 많이 받은 풀이

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> hm = new HashMap<>();
        for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
        for (String player : completion) hm.put(player, hm.get(player) - 1);

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

다른 사람 풀이를 보니 정석은 HashMap을 이용해서 푸는 것이었다고 한다.

hm.getOrDefault(key, DefaultValue)를 사용한 이유는 동명이인을 중복 체크하기 위해서이다.

hm.getOrDefault(key, DefaultValue)
찾는 key가 존재한다면 key의 value를 반환하고, 없다면 DefaultValue 반환

hm.put(player, 1)을 사용했다면 동명이인이 나왔을 때, 기존 key에 새로운 value를 줘서 동명이인이이 있더라도 value가 계속 1이 나오게 된다.

예시
participant - A C B A D
completion - B A C A

HashMap<String, Integer> hm = new HashMap<>();
    for (String player : participant) {
    	hm.put(player, hm.getOrDefault(player, 0) + 1);
    }
key value
 A	  2
 C	  1
 B 	  1
 D	  1
HashMap<String, Integer> hm = new HashMap<>();
    for (String player : completion) {
    	hm.put(player, hm.get(player) - 1);
    }
key value
 A	  0
 C	  0
 B 	  0
 D	  1

완주하지 못한 key값 "D"만 value에 1이 남게 된다.

배운 것

HashMap

Map의 일종으로 key와 두개의 value로 이루어진 데이터를 보관한다.

Map - key:value 구조(key는 중복X, value는 중복 가능)

사용법

import java.util.HashMap;

public class HashMap {
	public static void main(String[] args) {
    	// 해시맵 선언 - HashMap<타입, 타입> 변수 = new HashMap<타입, 타입>()
        HashMap<String, String> hm = new HashMap<String, String>();
        
        // 값 추가
        hm.put("1", "First");
        hm.put("2", "Second");
        
        System.out.println(hm)
        // 결과값 - {1=First, 2=Second}
        
        // 값 삭제
        hm.remove("1");
        
        System.out.println(hm)
        // 결과값 - {2=Second}
        
        // 값 출력하기
        for (Map.Entry<String, String> e : hm.entrySet()) {
        	System.out.prinln(e.getKey(), e.getValue());
        }
        // 결과값 - 2, Second
    }
}

0개의 댓글