프로그래머스 | 완주하지 못한 선수 (Java)

mul·2023년 2월 8일
0

코딩테스트연습

목록 보기
14/56

🔒 문제

프로그래머스 Lv.1 완주하지 못한 선수

🔑 해결

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return하는 solution 함수를 작성하는 문제이다.

참여한 선수 이름을 key로 하는 HashMap을 사용한다. 참가자 명단(participant 배열)에 이름이 더 나오는 만큼 key가 이름인 value에 1씩 더한다. 완주자 명단(completion 배열)에 이름이 나오는 만큼 이름(key)의 value에 1씩 뺀다. 참여자 명단에 있는 만큼 완주했다면 value는 -1이 되어야 한다. value가 -1이 아닌 선수는 완주하지 못한 선수로 판단한다.

  1. key가 String, value가 Integer형인 race HashMap 생성.
  2. 참가자 명단 수(participant.length)만큼 for문을 돌려,
    2-1. participant[i]가 race에 이미 추가된 key(이름)이라면 key의 value에 +1해서 put
    2-2. race에 새로 추가되는 이름이라면, race에 (participant[i] : 0) put
  3. 완주자 명단 수(completion.length)만큼 for문을 돌려, 완주자 명단에 있는 이름 key의 value에 -1해서 put
  4. 완주한 선수들의 value는 -1이므로, value가 -1이 아닌 key를 answer에 저장.

🔓 코드

import java.util.HashMap;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String, Integer> race = new HashMap<>();
        
        // 참가자 명단
        for (int i = 0; i < participant.length; i++) {
			if (race.get(participant[i]) != null) {
				int n = race.get(participant[i]);
				race.put(participant[i], n + 1);
			} else {
				race.put(participant[i], 0);
			}
		}
        
        // 완주자 명단
        for (int i = 0; i < completion.length; i++) {
			race.put(completion[i], race.get(completion[i])-1);
		}
        
        // 완주하지 못한 선수
        for (int i = 0; i < participant.length; i++) {
			if(race.get(participant[i]) != -1 ) {
				answer = participant[i];
				break;
			}
		}
        
        return answer;
    }
}

0개의 댓글