참여자 배열 participant와 완주자 배열 completion 배열을 정렬한 후 하나씩 비교
(전제 : 참여자 배열의 길이 = 완주자 배열의 길이 + 1)
만약 같은 인덱스의 요소 두 개가 서로 다르면 ➡️ 참여자 배열의 요소를 리턴
완주자 배열의 길이까지 모두 순회했는데 모두 같았던 경우 ➡️ 참여자 배열의 마지막 요소 리턴
❗️예시 1
participant = {"A", "B", "C", "D"}
completion = {"A", "C", "D"}
인 경우,
participant의 1번 요소 = "B"
completion의 1번 요소 = "C"
➡️ "B" 리턴
❗️예시 2
participant = {"A", "B", "C", "D"}
completion = {"A", "B", "C"}
인 경우,
완주자 배열의 길이까지의 요소 (0, 1, 2번 인덱스)가 모두 같음
➡️ 참여자 배열의 마지막 요소 리턴
➡️ "D" 리턴
처음 접근법
1. participant를 ArrayList<>로 만들고
2. completion 배열과 비교하면서
3. completion 배열에 있는 요소이면 삭제
4. 최종으로 남은 요소를 리턴하도록 함
➡️ 효율성 테스트에서 통과 못함
➡️ contains(), remove()에서 오래 걸렸던 것 같음
어떻게 수정할까 생각하다가, participant 배열과 completion 배열은 무조건 한 개 차이라는 걸 뒤늦게 읽고 냅다 정렬해서 배열을 순회함!
제발 문제를 잘 읽자~,,,,,
근데 이게 해싱이 맞는지?,, 문제가 이걸 의도한건지는 모르겠음 ㅎㅎ...
import java.util.Arrays;
public class Marathon {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
for (int i = 0; i < completion.length; i++)
if (!completion[i].equals(participant[i])) return participant[i];
return participant[participant.length - 1];
}
public static void main(String[] args) {
Marathon marathon = new Marathon();
System.out.println(marathon.solution(new String[]{"leo", "kiki", "eden"}, new String[]{"eden", "kiki"})); // "leo"
System.out.println(marathon.solution(new String[]{"marina", "josipa", "nikola", "vinko", "filipa"}, new String[]{"josipa", "filipa", "marina", "nikola"})); // "vinko"
System.out.println(marathon.solution(new String[]{"mislav", "stanko", "mislav", "ana"}, new String[]{"stanko", "ana", "mislav"})); // "mislav"
}
}