프로그래머스 - 완주하지 못한 선수 👈문제 보러가기
수많은 마라톤 선수들이 마라톤에 참여하였습니다.
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와
완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,
완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.제한사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
고민을 하다가 처음엔 이중 for문으로 접근을 했었다.
나의 답안을 올리기 전에
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
세번 반복하고 시작하겠다.
문제를 좀 잘 읽자 이 멍청한 나란 놈아
나의 답안
let 참가자 = ["mislav", "stanko", "mislav", "ana"]; // 배열에 동명이인이 있는경우
let 완주자 = ["stanko", "ana", "mislav"];
function solution(participant, completion) {
var answer = "";
// 참가자 인원중에 완주자 리스트에 없는 사람이 완주하지 못한 사람
for (let i = 0; i < participant.length ; i++) {
if (completion.indexOf(participant[i]) === -1) {
answer += participant[i]
}
}
return answer;
}
처음엔 이렇게 indexOf() 함수를 사용해 코드를 작성했는데
제한사항 중 동명이인은 찾아내지 못했다.
indexOf() 함수는 배열 내의 찾고자 하는 요소 최초의 인덱스를 리턴하고. 만약 발견되지 않으면 -1을 리턴한다.
그래서 동명이인 중 한명이 미완주자일 경우엔 앞에 완주했던 사람의 이름을 찾으면 더이상 찾는것을 멈추기 때문에
결과가 없다고 판단하고 '' 빈문자열이 반환되어 버린다.
그렇다면 어떻게 해야할까
맞는 답안
let 참가자 = ["mislav", "stanko", "mislav", "ana"]; // 배열에 동명이인이 있는경우
let 완주자 = ["stanko", "ana", "mislav"];
function solution(participant, completion) {
participant.sort() // [ 'ana', 'mislav', 'mislav', 'stanko' ]
completion.sort() // [ 'ana', 'mislav', 'stanko' ]
for(let i=0;i<participant.length;i++){ // 반복문으로 각각 배열의 i 인덱스 끼리 비교한다.
if(participant[i] !== completion[i]){ // 그러다가 다른 값이 나오면
return participant[i]; // 참가자 배열의 i 번째 인덱스 값을 리턴한다.
}
}
}
indexOf() 를 사용하지 않고 sort() 함수를 사용해 각각의 배열을 정렬 시킨 후 같은 순서의 인덱스 끼리 비교해서
다른값이 나온다면 해당 참가자는 완주자 배열에 들어있지 않은것이 되므로
바로 해당 참가자의 값을 리턴시켰다.
이렇게 생각보다 쉽게 풀릴것을 나는 문제를 대충읽어서
여러명의 미완주자가 나올것을 염두에 두고 문제를 풀었더니...
다음부턴 문제를 꼼꼼하게 읽어야겠다.
다른 사람의 답
let solution=(_,$)=>_.find(_=>!$[_]--,$.map(_=>$[_]=($[_]|0)+1))
// 위 코드를 풀어 써본것...
let solution=(participant,completion)=>participant.find(name=>!completion[name]--,completion.map(name=>completion[name]=(completion[name]|0)+1))
연구해볼 필요가 있을듯
이 사람은 .find() 와 .map을 사용해서 만들었는데
이해하려면 두가지 함수가 뭔지 정확하게 알아야 할 것 같다.