2day.algo.noah 완주하지 못한 선수

놀아·2020년 12월 7일
0

하루알고리즘 (Java)

목록 보기
2/15
post-thumbnail

💻문제소개

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

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

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

😪나만의 문제정의

  1. participant(참여자),completion(완주자) 행렬이 있다.
  2. 두행렬을 비교하여 완주자를 제외한 완주하지 못한 선수를 리턴한다.

😶문제풀이

  • 1차시도

이렇게하니 중복하지않은 완주자들 명단은 테스트를 통과하였다.   
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;
    }
}
  • 1차시도 결과

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

민망하지만, 반복문사용이 잘못되었고, 위사진과 같이 단순히 행렬 정렬후
경쟁자 사이즈만큼 반복문 돌린후 참가자에서 남은 부분들만 제외하면 되는 부분이었지만...

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;
    }
}
  • 2차시도 결과

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

결국 이번에도 코드를 볼수 밖에 없었다. 
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/ 배너생성기

profile
머리가 나쁘기 때문에 메모와 정리를 한뒤에 찾아보기

0개의 댓글