제이슨의 개발이야기

[코딩테스트] 완주하지 못한 선수 in Java 프로그래머스 코딩테스트 연습문제 본문

코딩테스트

[코딩테스트] 완주하지 못한 선수 in Java 프로그래머스 코딩테스트 연습문제

제이쓰은 2021. 4. 29. 10:49
728x90
반응형

저는 오늘 처음으로 프로그래머스 사이트에서 완주하지 못한 선수 란 문제를  풀어봤습니다 

문제 링크. programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

문제 설명은 

 

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

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

 

제한 사항은 

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

 이 문제에서 좀 까다로운 점은 동명이인이 있다 라는 제한 사항이였습니다

동명이인이 있다 라는 제한 사항이 없었더라면 해당 문제는 문제없이 쉽게 풀었겠지만 동명이인이 있어서 조금 어려움을 느낄 수 있는 문제였던거 같습니다 ! 

 

저는 이 문제를 보고 어떤식으로 접근해서 풀까 고민을 많이 했습니다

 

첨에는 이중 for문 을 이용해서 풀려고 했지만 결국 시간초과....ㅠㅠ

 

다시 처음부터 생각하던 와중 HashMap으로 풀면 풀수 있겠다 라는 생각을 하게 되었습니다 ! 

 

key값을 participant의 이름으로 하고 value 값을 이름의 수 (사람의 수를 의미 만약 동명이인 2명이라면 2이상  아니면 1)

ex(jason 이라는 사람이 두명이면 key = "jason" value = "2" )

 

로 하면 훨씬 빠르게 할 수 있겠다 라는 생각이 들었습니다! 

 

제 코드가 다른 분들에 비해 간결함이 좀 떨어지는 것을 느꼈고 더 열심히 공부해서 아래 코드보다 더 간결하고 효율적인 코드를 짜보도록 공부해야겠다는 욕심이 생기게되었습니다 ㅎㅎ 우리 같이 열심히 공부합시다

import java.util.HashMap;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String,Integer> map = new HashMap<>();
        for(int i = 0; i<participant.length;i++){
            if(map.keySet().contains(participant[i])){
             int num =  map.get(participant[i]);
                map.put(participant[i],num+1);
            }else{
                map.put(participant[i],1);
            }
        }

        for(int j = 0; j<completion.length;j++){
            if(map.get(completion[j])==1){
                int num =  map.get(completion[j]);
                map.put(completion[j],num-1);
            }
           else if(map.get(completion[j])>1){
                int num =  map.get(completion[j]);
                map.put(completion[j],num-1);
            }
        }
        for(int i=0 ; i<participant.length;i++){
            if(map.get(participant[i])==1){
                answer = participant[i];
            }
        }
        return answer;
    }

}

 

728x90
반응형