본문 바로가기
Study Note/Algorithm

프로그래머스 #해시 - 완주하지 못한 선수 lv1

by 시뮝 2020. 10. 16.
728x90

https://programmers.co.kr/learn/courses/30/lessons/42576?language=javascript

 

1차 시도

실행결과 시간 초과로 효율성 테스트를 모두 실패하였다 ㅠㅠ

.length 와 같은 코드를 변수로 따로 빼고 속도 줄이기 시도!

/**
 *  @description  완주하지 못한 선수의 이름을 조회하는 함수
 *  @params participant : 마라톤에 참여한 선수들
 *  @params completion  : 마라톤을 완주한 선수들
 *  @return answer : 완주하지 못한 선수의 이름
 */
function solution(participant, completion) {
    let answer = '';
    let partList = participant; //미완주 선수만 남겨둘 변수 선언
    
    //완주한 선수의 이름을 참여선수 목록 partList에서 제외합니다.
    for(let i=0; i<completion.length; i++) {
        let completeMan = partList.find(p => p==completion[i]); 
        let idx = partList.indexOf(completeMan);
        
        if(idx!=-1) {
            partList.splice(idx,1); //완주 선수 제거
        }
    }
    
    //미완주 선수 목록을 모두 출력합니다.
    answer = partList.join(','); 
    
    return answer;
}

2차 시도

for문으로 계속 구하고 있던 .length와 같은 코드를 지역변수로 빼니 시간이 조금 줄어들었다

그래도 효율성 테스트 실패 ㅠㅠ async로 3차시도!는 내일 퇴근하고 해야겠다

/**
 *  @description  완주하지 못한 선수의 이름을 조회하는 함수
 *  @params participant : 마라톤에 참여한 선수들
 *  @params completion  : 마라톤을 완주한 선수들
 *  @return answer : 완주하지 못한 선수의 이름
 */
function solution(participant, completion) {
    let answer = '';
    let len = completion.length;
    let partList = participant; //미완주 선수만 남겨둘 변수 선언
    let completeMan = '';
    let idx = -1;
    
    for(let i=0; i<len; i++) {
        completeMan = partList.find(p => p==completion[i]); 
        idx = partList.indexOf(completeMan);
        
        if(idx!=-1) {
            partList.splice(idx,1); //완주 선수 제거
        }
    }
    
    //미완주 선수 목록을 모두 출력합니다.
    answer = partList.join(','); 
    
    return answer;
}

 

 

3차 시도

문제를 천천히 읽어보니 completion 의 길이는 participant 의 길이에서 1이 부족하다는 사실이 핵심이었다. 그럼 무조건 한명이 안온것이니 for문을 한번만 돌리고 발견하자마자 완주하지 못한 선수를 리턴해주면 되는 것이다.

/**
 *  @description  완주하지 못한 선수의 이름을 조회하는 함수
 *  @params participant : 마라톤에 참여한 선수들
 *  @params completion  : 마라톤을 완주한 선수들
 *  @return answer : 완주하지 못한 선수의 이름
 */
function solution(participant, completion) {
    let answer = '';
    
    participant.sort();
    completion.sort();
    
    for(let i=0; i<participant.length; i++) {
        if(participant[i]!==completion[i]) {
            answer = participant[i];
            break;
        }
    }
    
    return answer;
}

 

이제 끝~

728x90

댓글