📌 문제
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
📌 제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
📌 풀이
알아야 하는 것
- sort()
구할 것
- 참가자와 완주자 배열의 차이는 1 이며 낙오자도 1명이다.
- 참가자와 완주자 배열을 동일하게 만들고 sort로 정렬한 후 for 문을 돌렸을 때 동일한 인덱스에 동일한 값이 있다면 그 값은 완주자다.
- arr1 = ["eden", "kiki", "leo"]과 arr2 = ["", "eden", "kiki"]로 예를 들어보자.
- arr1[0] !== arr2[0] 은 eden과 ""을 비교한다. fail = arr1[0], 즉 fail = "eden"이 된다.
- arr1[1] !== arr2[1] 은 kiki와 eden을 비교한다. fail = arr1[1], 즉 fail = "kiki"가 된다.
- arr1[2] !== arr2[2] 는 leo와 kiki를 비교한다. fail = arr1[2], 즉 fail = "leo"가 된다.
- 두 배열의 길이를 동일하게 만든 것은 이렇게 두 배열을 비교하기 위함이었다. 그런데 보다시피 좀 헷갈린다.
- 이름 순으로 정렬했기 때문에, 같은 인덱스에 없을 경우는 뒤에 있거나 아예 없거나다. 배열끼리 비교했을 때 앞에 같은 값이 없다면 뒤에서 다시 비교해서 가는 것이다.
function solution(participant, completion) {
let fail = "";
completion.push("");
let arr1 = participant.sort();
let arr2 = completion.sort();
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
fail = arr1[i];
}
}
return fail;
}
➕ 또 다른 풀이
- 사실 추가할 필요가 없었다! ...이게 훨씬 쉬움.
function solution(participant, completion) {
participant.sort();
completion.sort();
for (let i in participant) {
if (participant[i] !== completion[i]) {
return participant[i];
}
}
}
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 가장 가까운 글자 (0) | 2023.06.01 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 모의고사 (0) | 2023.05.31 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 폰켓몬 (0) | 2023.05.29 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 다음 큰 숫자 (0) | 2023.05.26 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 짝지어 제거하기 (0) | 2023.05.25 |