문제 요약
⇒ 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return
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!
→ completion의 모든 요소가 participant와 같다면 participant의 마지막 남은 요소가
완주하지 못한 선수이다.
→ 다른 요소가 있다면 중간에 완주한 선수들 중에 한 명이 비는 것이기 때문에 그 인덱스에
해당하는 참가자가 완주하지 못한 선수가 된다.