Algorithm - lev1 완주하지 못한 선수

ryan·2022년 5월 21일
0

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

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

내 풀이(50/100)

function solution(participant, completion) {
    for (let i = 0; i < completion.length; i++) {
      if (participant.indexOf(completion[i]) >= 0) {
        participant.splice(participant.indexOf(completion[i]), 1);
      }
    }
    const [answer] = participant;
    return answer;
  }
  • 정확도는 통과했지만, 효율성 검사에서 감점됐다. 더 효율적인지는 모르겠지만 아래와 같이 반복문 데이터를 줄이는 시도도 해봤으나 통과하지 못했다.
function solution(participant, completion) {
  const ex = new Set(participant);
  const arr = Array.from(ex);
  let a = '';
  if (arr.length === completion.length) {
    participant.forEach((e) => {
      if (participant.indexOf(e) !== participant.lastIndexOf(e)) {
        a = e;
      }
    });
    return console.log(a);
  } else {
    const [b] = participant.filter((e) => completion.indexOf(e) === -1);
    return console.log(b);
  }
}

통과한 풀이 보기

function solution(participant, completion) {
  participant = participant.sort();
  completion = completion.sort();
  for (let i = 0; i < completion.length; i++) {
    if (participant[i] !== completion[i]) return participant[i];
  }
  return participant[participant.length - 1];
}
  • sort를 통해 매개변수의 값을 정렬시키고 각 요소를 반복문으로 비교하면서 맞지 않는 부분을 리턴하는 구조이다. 중복을 없애는 것만이 효율을 올리는 거라고 생각했는데, 이렇게 데이터 형태를 일치, 재정렬하는 것도 효율성을 높이는 방법이란걸 배웠다.
profile
프론트엔드 개발자

0개의 댓글