공부/코딩테스트

Q. 완주하지 못한 선수

뀨뿌뀨뿌 2023. 6. 19. 13:43

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

🚫제한 사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.

❗입출력 예

participant completion return
["leo", "kiki", "eden"] [ "eden", "kiki] "leo"
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"] [ "stanko", "ana", "mislav"] "mislav"

😀 내가 푼 답

participant, completion 배열을 오름차순으로 정렬
completion 배열의 길이만큼 반복하면서 participant, completion 배열의 동일한 인덱스에 있는 요소들을 비교
비교한 요소가 다르다면, 해당 참가자는 완주하지 못한 선수이므로 그 이름을 리턴하고 모든 비교가 끝났는데도 완주하지 못한 선수가 없다면, 마지막으로 남은 참가자가 완주하지 못한 선수이므로 그 이름을 리턴

function solution(participant, completion) {
  participant.sort();
  completion.sort();
  for (let i = 0; i < completion.length; i++) {
    if (participant[i] !== completion[i]) {
      return participant[i];
    }
  }
  return participant[participant.length - 1];
}

😊 문제풀이 답안 OR 다른사람들 답안

// 1
function solution(participant, completion) {
    var dic = completion.reduce((obj, t)=> (obj[t]= obj[t] ? obj[t]+1 : 1 , obj) ,{});
    return participant.find(t=> {
        if(dic[t])
            dic[t] = dic[t]-1;
        else 
            return true;
    });
}

// 2
function solution(participant, completion) {
    let obj = new Object();
    let answer = '';
    for (name of completion){
        if( obj[name] == undefined){
            obj[name] = 1;
        } else {
            obj[name]++;
        }
}

// 3
for(name of participant){
    if(obj[name]==0 || obj[name]==undefined){
       answer = name;
        break;
    } else {
        obj[name]--;
    }
}
    return answer;
}
  • find()
    • 주어진 함수의 조건을 만족하는 첫번째 요소값을 반환함
    • 조건에 맞는 요소가 없다면 undefined를 반환함

참고

 

[JavaScript] 배열 메소드 find()과 findIndex()

ES5 문법에서는 배열 내의 검색을 위한 indexOf() 라는 배열 메소드가 있었는데, ES6 문법에서는 더 강력한 find()와 findIndex() 2개의 배열 메소드를 지원합니다. 지금부터 find()와 findIndex() 메소드에 대

dori-coding.tistory.com

 

'공부 > 코딩테스트' 카테고리의 다른 글

Q. 자릿수 더하기  (0) 2023.06.19
Q. 이상한 문자 만들기  (0) 2023.06.19
Q. 수박수박수박수박수박수?  (0) 2023.06.19
Q. 서울에서 김서방 찾기  (1) 2023.06.19
Q. 문자열 다루기 기본  (0) 2023.06.17