ejyoo's 개발 노트

완주하지 못한 선수 본문

문제풀이/코드프로그래머스 문제풀이

완주하지 못한 선수

ejyoovV 2021. 3. 4. 09:19
  • 🤜🏻 문제설명

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

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

  • 🤜🏻 제한사항

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

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

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

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

  • 🤜🏻 입출력 예
  • 🤜🏻 알고리즘

    participant 배열과 completion 배열의 관계를 잘 생각해보자.

    participant에는 참여한 모든 선수들의 이름이 다 들어가 있고

    completion에는 완주한 선수들의 이름이 들어가 있다.

    입출력 예를 보면 둘의 배열 길이의 차가 1밖에 되지 않는다. (완주하지 못한 선수는 항상 1명)

    각 배열을 순서대로 정렬한 뒤 세로로 나란히 놓았을 때, 일치하지 않는 인덱스의 선수를 return 하면 된다.

  • 🤜🏻 코드
    package codeprogrammersProject;
    
    import java.util.Arrays;
    
    import org.junit.Assert;
    import org.junit.Test;
    
    public class 완주하지못한선수 {
    	public String solution(String[] participant, String[] completion) {
    	    Arrays.sort(participant);
    	    Arrays.sort(completion);
    	    
    	    int i = 0;
    	    
    	    for(i = 0 ; i < completion.length ; i++) {
    	    	if(!participant[i].equals(completion[i])) {
    	    		return participant[i];
    	    	}
    	    }
    	    
    	    return participant[i];
    	}
    	
    	    
        @Test
    	  public void 정답(){
    	    Assert.assertEquals("leo", solution(new String[] {"leo", "kiki", "eden"}, new String[] {"eden", "kiki"}));
    	    Assert.assertEquals("vinko", solution(new String[] {"marina", "josipa", "nikola", "vinko", "filipa"}, new String[] {"josipa", "filipa", "marina", "nikola"}));
    	    Assert.assertEquals("mislav", solution(new String[] {"mislav", "stanko", "mislav", "ana"}, new String[] {"stanko", "ana", "mislav"}));
    	  }
    }