Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 완주하지 못한 선수 본문

⚙️ 코딩테스트

[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 완주하지 못한 선수

썸머몽 2023. 5. 30. 12:46
728x90

📌  문제

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

마라톤에 참여한 선수들의 이름이 담긴 배열 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];
    }
  }
}

 

 

 

728x90