프로그래머스 완주하지 못한 선수 (JS) : 오늘도 효율성 테스트와 싸운다.....😥

REASON·2022년 9월 15일
0

알고리즘

목록 보기
8/20

효율성 테스트에서 0점을 맞았다.
이번에도 정확성 테스트에서 TC 5개를 모두 통과했지만 항상 효율성이 똥인 코드를 짜는 나를 발견할 수 있다.

처음에 이 문제를 만났을 때는 정확성 테스트에서부터 갈려나갔었다...ㅠ
동명이인을 처리하는 코드에서 문제가 있었는데 completion의 길이가 participant보다 1이 작다는 힌트를 통해 정렬한 후에 for문을 돌려서 똑같지 않을 때 그 사람이 완주하지 못한 사람이다! 라는 것을 알 수 있었다.
문제는 동명이인이 아닌 경우에서 효율성 문제가 발생했다.

첫번째 풀이

function solution(participant, completion) {
    var answer;
    
    participant.sort();
    completion.sort();
    for(let i = 0; i < completion.length; i++){
        if(participant[i] !== completion[i]){
            return participant[i]
        }
        
        for(let j = 0; j < participant.length; j++){
            if(completion.includes(participant[j]) === false) answer = participant[j];
        }
        
    }
    return answer;
}

아무래도 시간초과가 나는게 이중 for문 때문에 그런 것 같다.

효율성 테스트 결과 나오는 것도 엄청 오래걸리는 것으로 보아 잘못짜도 단단히 잘못짠 모양이다.

그리고 나는 바보였따..

두번째 풀이

function solution(participant, completion) {
    var answer;
    
    participant.sort();
    completion.sort();
    for(let i = 0; i < completion.length; i++){
        if(participant[i] !== completion[i]){
            return participant[i]
        }
    }
        
    for(let j = 0; j < participant.length; j++){
        if(completion.includes(participant[j]) === false) answer = participant[j];
    }
    
    return answer;
}

왜 이중 for문을 만들어서 풀었지? ㅋㅋㅋ......

그냥 for문을 밖으로 빼기만 했어도 효율성 테스트도 넘어가는 코드였다.
역시 생각없이 막 짜면 안되는구나를 잊어버릴때쯤 다시 상기시켜주는 내 모자람......

앞으로 이중 for문 코드로 작성되었을 때 다시 한번 더 확인하는 습관을 가져야겠다.......

오 테케 맞았네? 그럼 제출해도 되겠네? 하고 매번 설레발쳐서 제출하면 효율성 테스트 0점 나오거나 테케 몇개 맞고 나가리 당할 때가 많다..ㅎㅎㅎㅎ..

0개의 댓글