[Java] 완주하지 못한 선수

정석·2023년 12월 26일

알고리즘 학습

목록 보기
1/67
post-thumbnail

1️⃣ 정답 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

class Solution{
	
	public String solution(String[] participant, String[] completion) {
		
		String answer = "";
		HashMap<String, Integer> h1 = new HashMap<String, Integer>();
		for(String player: participant) {
			h1.put(player, h1.getOrDefault(player, 0) + 1);
		}
		for(String player: completion) {
			h1.put(player, h1.get(player) -1 );
		}
		for (String key : h1.keySet()){
			if (h1.get(key) != 0) {
				answer = key;
				break;
			}
		}
		return answer;
	}
}

클래스, static main 구조로 작성해야 하는줄 알고 초반에 계속된 컴파일 오류에 오래 걸렸다. 백준처럼 풀코드로 작성하는 것이 아닌 알고리즘 부분만 작성해야 함을 알았다.

  • HashMap 을 이용하여 key, value 형태로 저장되게 하였으며, 참가자에서 완주자를 제거하는 알고리즘이다.
  • 동명이인으로 인한 중복되는 키의 이름 때문에 키가 한번 저장되면 value의 값이 하나씩 증가하는 방식으로 완주자를 다 제거하였음에도 밸류가 남는다면 해당 인원은 완주를 못했거나 동명이인이다.

2️⃣ 새롭게 알게된 부분

1. HashMap

Map의 인터페이스를 상속하고 있기에 Map의 성질을 가지고 있다. Map 이란 key & value로 구성된 객체를 저장하는 자료구조이다.

(1) entrySet / keySet
entrySet은 키, 밸류 모든 값들을 순회할 때 사용되고 keySet은 키 값만 모두 순회할 때 사용된다.

(2) hash get / put
hash.get(key) 를 통해 해당 key에 대한 밸류를 출력한다.
hash.put(key) 를 통해 해당 key에 대한 밸류를 입력한다.

0개의 댓글