3일차 → 완주하지 못한 선수(sort(), find())
본문 바로가기
항해 중/2주차 알고리즘(프로그래머스)

3일차 → 완주하지 못한 선수(sort(), find())

by 은돌1113 2021. 11. 10.

문제설명

수많은 마라톤 선수들이 마라톤에 참여 하였습니다.

단 한명의 선수를 제외하고난 모든 선수가 마라톤에 완주하였습니다.

 

마라톤에 참가한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때

완주하지 못한 선수의 이름을 return 하세요.

 

제한조건

- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.

- completion의 길이는 participant의 길이보다 1 작습니다.

- 참가자의 이름은 1개 이상 20개 이하의 알파벡 소문자로 이뤄져 있습니다.

- 참가자 중 동명이인이 있을 수 있습니다.

 

내가 푼 문제 풀이

function solution(participant, completion) {
    
    let par = participant.sort()
    let com = completion.sort()
    // 각 배열을 sort()를 사용해서 오름차순으로 정렬

    let answer = par.find((item, i)=>{return item!=com[i]})
    // 배열함수 중 find()는 조건에 맞는 결과값 중 처음 나오는 하나만 return 한다.
    // find() 함수를 사용해서 par과 com의 값을 비교하고 다르면 return 해서
    // answer에 담도록 하였다.
    
    return answer;
}

 

다른 사람이 푼 문제 풀이

function solution(participant, completion) {

    participant.sort(); //참가자 배열 정렬
    completion.sort(); //완주자 배열 정렬
    
    for(var i=0;i<participant.length;i++){
        if(participant[i] !== completion[i]){
            //인덱스 0부터 순차적으로 두 배열 비교
            return participant[i];
            //비완주자가 참가자 배열에 나올 경우 출력
        }
    }
}

이 경우에는 if문을 사용해서 participant와 completion에 인덱스 값을 비교해서 다르면 return 키워드를 사용해서 participant의 인덱스 값을 반환하여 프로그램이 끝나도록 구현 하셨다.

 

다른 분들의 코드 중에 for in을 사용하시는 분들이 많았었는데

for in은 코드의 성능을 하락 시키는 코드라서 사용을 안하면 좋다는 얘기를 봤다.

 

https://wooder2050.medium.com/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%99%84%EC%A3%BC%ED%95%98%EC%A7%80-%EB%AA%BB%ED%95%9C-%EC%84%A0%EC%88%98-javascript-2ecb52443e8d

 

[알고리즘] 완주하지 못한 선수-JavaScript

Algorithm Problem with JavaScript — 1 day

wooder2050.medium.com

 

https://programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

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

programmers.co.kr

 

댓글