[프로그래머스] 코딩 테스트 연습 - 완주하지 못한 선수(Java)

수경·2022년 11월 28일
0

problem solving

목록 보기
66/174

프로그래머스 - 완주하지 못한 선수

풀이

참여자 배열 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"
	}
}
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글