문제 설명 |
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. |
제한 조건 |
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. |
문제에서 가장 중요한건 완주실패자는 무조건 한명이라는 것이다.
그 말은 participant와 completion의 요소의 개수도 한개 차이라는 것이다.
function solution(participant, completion) {
var answer = '';
participant.sort() //참여자 배열 정렬
completion.sort() //완주자 배열 정렬
//비교를 위해 최대길이인 참여자의 길이로 설정
for (let i=0;i<participant.length; i++) {
//만약 처음으로 값이 같지 않은게 나오면 정렬이 되었으므로
//처음 나온 곳의 participant요소가 완주하지 못한 사람이다.
if (participant[i]!==completion[i]) {
answer = participant[i]
//탈락자를 찾아냈으므로 for문을 마무리하기위해 break를 사용한다.
break
}
}
return answer;
}
먼저 participant와 completion배열을 오름차순으로 sort해준다.
(sort()에 값을 넣지 않으면 유니코드 포인트값에 따라 정렬함)
그리고 for문의 최종값을 participant.length로 설정하였는데, 이는 정렬하고 마지막에 탈락자가 배치될때를 위함이다.
여기부턴 예를 들어 설명하겠다.
participant = [나, 다, 가] // completion = [다, 나] 로 입력됐다고 가정해 보자.
두 배열을 sort하면
participant = [가, 나, 다] // completion = [나, 다]로 정렬 될 것이다. 아래와 같다.
i = 0 | i = 1 | i = participant.length | |
participant | 가 | 나 | 다 |
completion | 나 | 다 |
if (participant[i] !== completion[i]) = 인덱스가 같은 두 요소들이 같지 않을때 if문의 명령문을 진행한다.
answer = participant[i] 위의 표와 같이 가 !== 나 이므로 answer에 participant[0]값을 입력한다.
break = 완주하지 못한 사람을 찾아 입력했으므로 for문을 그만둔다.
만약 break가 없다면 그 뒤의 값은 완주를 했으나, 양측의 값이 같지 않기에 계속해서 답이 변하게 된다.
이번 문제는 break를 활용해 적절한 시점에 for문을 마무리하여 정확한 값을 반환해 내야 하는 것 이었다.
'1차 공부 > 알고리즘' 카테고리의 다른 글
자릿수 더하기 (0) | 2022.11.23 |
---|---|
이상한 문자 만들기 (0) | 2022.11.23 |
수박수박수박수박수박수? (0) | 2022.11.23 |
서울에서 김서방 찾기 (0) | 2022.11.23 |
문자열 다루기 기본 (0) | 2022.11.23 |