완주하지 못한 선수

SSO·2022년 1월 30일
0

Coding Test & Algorithm

목록 보기
3/17
post-thumbnail

문제 요약

⇒ 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return

  • participant : 참여 선수들
  • completion : 완주한 선수
  • 한 명을 제외하고는 모두 완주를 했다. completion의 길이는 participant 길이보다 1작다.
  • 동명이인이 있을 수 있다

처음 작성한 코드 - !실패!

import java.util.Arrays;
import java.util.List;

public class Running {
    public String solution(String[] participant, String[] completion) {
        String answer = ""; // 완주하지 못한 선수의 이름을 return
        List<String> par_list = Arrays.asList(participant);
        List<String> com_list = Arrays.asList(completion);
        int count = 0;

        // 알파벳 순으로 선수들 이름을 정렬한다.
        Arrays.sort(completion);   // ana mislav stanko
        Arrays.sort(participant);  // ana mislav mislav stanko

        for(int i = 0; i < completion.length; i++){
            for(int j = 0; j < participant.length; j++){
                if(completion[i] == participant[j]){
                    count++;
                }
                if(count == 0){
                    answer = participant[j];
                }else if(count > 1){ // 동명이인이 있을 경우
                    par_list.remove(participant[j+1]);
                    com_list.remove(completion[i]);
                }
            }
        }

        return answer; // mislav
    }
}

→ 예시를 기준으로 mislav가 하나만 없어져야 하는데 참가자에서 모두 없어지게 되어 계속 stanko가 답으로 리턴되었다..........

정답 코드

import java.util.Arrays;

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

우선 코드가 매우매우 단순해졌다! 너무 어렵게 생각하고 문제를 풀고있었다ㅡㅡ,,,

!Point!

  • participant 배열과 completion 배열을 비교하기 위해 알파벳 순으로 정렬을 하는 것은 처음 코드와 동일하다.
  • 그 다음 대응하는 요소끼리 비교를 한다.
  • 대응하는 요소끼리 비교를 해서 다른 요소가 있다면 그 요소를 리턴한다.
  • for 문을 돌면서 다른 요소를 찾지 못했다면 participant의 마지막 남은 요소를 리턴한다.
    → 이게 가능한 이유는 사전에 제시된 participant와 completion 배열의 길이의 차는 1이라는 조건 때문에 가능한 것이다.
    →  completion의 모든 요소가 participant와 같다면 participant의 마지막 남은 요소가 
    
        완주하지 못한 선수이다.
    
    → 다른 요소가 있다면 중간에 완주한 선수들 중에 한 명이 비는 것이기 때문에 그 인덱스에 
    
        해당하는 참가자가 완주하지 못한 선수가 된다.
profile
👩🏻‍💻👊🏻⭐️

0개의 댓글