[프로그래머스] Level 1 완주하지 못한 선수

 

 

 

문제

마라톤 경주에서 참가자들 중 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤 참가 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 

 

완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

 

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

 

 

 

 

 

나의 답안(효율성 테스트 탈락)

 

리스트로 변환한 후, 완주한 참가자의 이름을 하나씩 대조하여 제거한 후

 

최종적으로 리스트에 남은 1명의 참가자의 이름을 return하도록 작성하였으나,

 

효율성 테스트에서 시간 초과로 오답 처리되었다.

 

 

import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        ArrayList<String> part = new ArrayList<>(Arrays.asList(participant));

        for (int i=0; i<completion.length; i++) {
            part.remove(completion[i]);
        }

        return part.get(0);
    }

 

 

 

 

 

다른 유저의 답안

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을 생성, 참가자 value값 +1, 완주자 value값 -1
  • getOrDefault 메서드를 사용하여 동명이인 있을 경우 오류에도 대비
    (HashMap에서는 같은 key값이 선언될 경우 value값이 변경되어 등록됨)

 

 

 

getOrDefault를 사용하는 부분에서 감탄했다.

이런 메서드들을 적재적소에 잘 활용할 수 있는 개발자가 되어야지..

 

 

복습

       리스트(List)

  • a.add(요솟값) : 해당 리스트에 원하는 요솟값을 추가
  • a.remove(인덱스): 해당위치 항목 삭제, 그 요솟값 리턴
  • a.remove(요솟값): 해당 요솟값을 삭제, true/false리턴
  • a.get(인덱스): 해당위치 요솟값 리턴

 

      맵(Map)

  • a.put(key값, value값): key와 value 추가
  • a.get(key값): key에 해당하는 value값 반환
  • a.getOrDefault(key값,얻을값): key에 해당하는 value값이 없을 때, null대신 얻을값을 반환
  • a.keySet(): 모든 key값을 모아 집합 자료형으로 리턴