문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다

단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다

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

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

 

제한 조건

- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다

- completion의 길이는 participant의 길이보다 1 작습니다

- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다

- 참가자 중에는 동명이인이 있을 수 있습니다

 

입출력 예시

participant completion return
["leo", "kiki", "eden"] ["eden", "kiki"] "leo"
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"] "mislav"

 

나만의해석

저음에는 sort 해서 비교해서 participant 의 마지막 값을 출력하면 되겠내 했지만

for문에서 participant 만큼 돌면 에러가나고 completion만큼 돌면 false를 얻어낼 수 없어서

고민을 했다 결국 인터넷에 쳐서 보니 나랑 똑같은데 어디가 달라서 나는 답이 나오지 않는지 모르겠다

다른 팀원에게 설명을 부탁해서 밑에 적어보겠다

 

일단 내가 생각한게 맞긴했다 그러나 조금 예외처리 해줘야하는 부분을 생각 못한거 같다

맨 처음 participant 와 completion이 들어오면 sort 해서 정렬 해준다

그리고 completion 길이만큼 for문을 participant와 비교하는데 맞지 않는 부분이 생기면

answer에 participant를 넣어준다 이건 동명이인이 있을때 처리가능하다

하지만 동명이인이 없다면 completion 만큼 for문이 돌다보니 participant랑 비교를 못한다

그때 아래에 if문을 하나더 줘서 예외로 i번 째와 completion의 길이보다 -1 한값

즉 true가 되게끔 만들어주고 participant의[i +1] 을 answer에 넣어준다

 

public class Solution {
    public static void main(String[] args) {
        String answer = "";

        String[] participant = {"leo", "kiki", "eden"};
        String[] completion = {"eden", "kiki"};

        Arrays.sort(participant);
        Arrays.sort(completion);

        //반복되는 거 처리용
        //참가자 중에는 동명이인이 있을 수 있습니다.
        //completion의 길이는 participant의 길이보다 1 작습니다.
        // 위 2개 조건으로 인해, 동명이인은 최대 1명밖에 발생안하니 예외사항 고려안해도됨 (동명이인이 2명이면? 같은 것들)
        for(int i=0; i<completion.length; i++){
            if(!participant[i].equals(completion[i])){
                answer = participant[i];
                break;
            }
            // 맨 마지막 자리 추출용
            if(i == completion.length-1){
                answer = participant[i+1];
            }
        }
        System.out.println(answer);
    }
}