2day.algo.Noah完走していない選手


💻質問の概要

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

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

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

😪自分の問題を定義する

  • の参加者(参加者)、完了者(完了者)行列がある.
  • の2つのマトリクスを比較して、完全な距離を走った以外に完走していない選手を返します.
  • 😶問題を解く

  • 初めての試み

  • 이렇게하니 중복하지않은 완주자들 명단은 테스트를 통과하였다.   
    import java.util.*;
    
    class Solution {
        public static String solution(String[] participant, String[] completion) {
            String answer = "";
            /* 명단 정렬 */
            Arrays.sort(participant);  
            Arrays.sort(completion);
            
            for(int i =0; i<participant.length;i++){
                for(int j=0; j<completion.length;j++){
                    if(!(participant[i].equals(completion[j]))){ // 두행렬이 다를경우 answer 리턴
                        answer = participant[i];
                        if(answer.equals(participant[i])){ // 중복된 부분 있다면 멈추기
                            break;
                        }
                    }
                }
            }
            
            return answer;
        }
    }
  • 最初の試行結果

  • 10분정도 고민하다가 시간을 끌다간... 시간낭비가 될까봐 구글링을 하였다.
  • 二次試行


    出版:https://medium.com/@nsh235482/
  • 気まずいですが、繰り返し文の使用エラーは、上図のようにマトリクスのソート後だけです.
    競合他社のサイズに合わせて繰り返しパスした後、参加者の残りの部分を除外すればいいのですが...
    import java.util.Arrays;
    	class Solution {
        public static String solution(String[] participant, String[] completion) {
            String answer = "";
            Arrays.sort(participant);
            Arrays.sort(completion);
            int similarInt = completion.length; // 완주자 사이즈
            answer = participant[similarInt];
    
            return answer;
        }
    }
  • 二次試行結果

  • 이번에도 중복을 고려되지않은채 중복케이스를 통과하지 못했다.
  • 完了

  • 결국 이번에도 코드를 볼수 밖에 없었다. 
    import java.util.Arrays;
    class Solution {
        public static String solution(String[] participant, String[] completion) {
            String answer = "";
            String temp = "";
            Arrays.sort(participant);
            Arrays.sort(completion);
            int i = 0;
     	while (i < completion.length){ // 완주자만큼 반복문 수행
                if(!completion[i].equals(participant[i])){ //비교가 다른경우 참가자요소를 부여후 반복문 종료
                    temp = participant[i];
                    break;
                }else{
                    i++;
                }
            }
            
            if(!temp.equals("")){ // 부여된 temp 문자열 리턴
                answer = temp;
            }else{ // 다른 문자열이 없을경우 참가자 행렬 마지막 요소 리천
                answer = participant[participant.length-1];
            }
    
            return answer;
        }
    }
  • 完了結果

  • 중복체크가 중요, 다른경우 경쟁자요소를 부여하는것이 아닌 참가자 요소를 넣는것이다
    풀이후에 해시자료구조를 사용해야하는 문제에 해당하는것으로 해시로 다시 풀어봐야겠다.

    リファレンス


    https://medium.com/@nsh235482 Sarah Na Blog
    https://velog.io/@godori/banner-maker-update GODORI
    https://banner.godori.dev/枚幅ジェネレータ