[알고리즘] 프로그래머스 완주하지 못한 선수

hoonie·2021년 7월 27일
0

알고리즘

목록 보기
13/15
post-thumbnail

문제 url

처음 푼 코드


function solution(participant, completion) {
        var answer = participant;

        for (let i of completion) {
          answer.splice(participant.indexOf(i), 1);
        }
        answer = answer[0];
        return answer;
      }

설명

  • completeion을 반복문을 돌리고 해당 문자를 participant가 가지고 잇으면 그거를 제거하는 방법으로 하였다. 그리고 그 배열의 값을 문자열로 출력을 하였다.

이렇게 한 결과

정확성은 다 맞았다. 하지만 효율성에서 0점이 나온것이다.. 아마 for문이 끝까지 돌게되면서 시간복잡도가 늘어난것이지 않을까 싶다. 그래서 다른 사람의 코드를 참고했다.

수정 코드

      function solution(participant, completion) {
        participant.sort();
        completion.sort();

        for (const i in completion) {
          if (participant[i] != completion[i]) return participant[i];
        }
        return participant[participant.length - 1];
      }

      let participant = ["leo", "kiki", "eden"];
      let completion = ["eden", "kiki"];
      console.log(solution(participant, completion));
     

설명

  • 우선 participant하고 completion을 다 정렬을 한다.
    그리고 completion의 반복문을 돌리고 만약 일치하지 않는 값이 나오면 for문을 멈추고 바로 return을 해버린다. 이렇게 하면 시간복잡도도 확 줄어들면서 속도 개선에 큰 도움이 된다.
    하지만 completion이 participant보다 짧기때문에 완주하지 못한 참가자가 participant의 마지막에 있을경우 반복문에서 return 값을 얻어내지 못한다. 때문에 그렇지 못한경우 participant의 마지막을 리턴하는 participant[participant.length - 1]; 을 추가한다.

그 결과, 정확성 효율성 모두 만점이다.

0개의 댓글