본문 바로가기
TIL

[프로그래머스] 모의고사

by dev__log 2024. 3. 28.

아... 정말 요즘 오타 때문에 자꾸 코딩 테스트가 오래걸린다.......

아아악 제발 정신 차려...

 

문제

 

오늘은 프로그래머스의 모의고사를 풀었는데, 진짜 계속 안됐다. 

 

문제 경우 1. 모의고사 문제가 수포자 답안보다 수가 많을 경우 / 42.9

처음에 안된 부분은 수포자가 찍는 답안의 수 배열보다 문제답안 배열의 수가 더 많을 때 다시 수포자 답안의 첫 번째 답안으로 돌아가야 하는 부분을 제대로 구현하지 못해서 통과를 못했다. 

 

이 부분은 현재 비교할 번째인 i 를 수포자 답 배열의 수로 나눈 나머지의 값을 구해 그 값을 인덱스로 사용하여 수포자답안의 인덱스와 정답 답안(answers) 의 i 번째와 비교하도록 하였다.

 

이전에는 수포자 답 배열 length 와 i 가 같으면 i 를 0으로 초기상태로 돌린 후 비교를 하려고 했는데 이게 잘 되지 않았다. 계속 무한 루프를 돌다가 시간 초과로 끝났다. 여기서 42.9점...ㅋㅋㅋ

 

문제 경우 2. 복붙 이슈... / 50

위의 첫 번째 문제를 해결하고 정말 통과할 줄 알았다. ㅋㅋㅋ 

테스트 케이스도 잘 통과하고 보기에도 정말 문제가 없다고 생각되는데 계속 제출만 하면 50점을 맞으면 종료되었다. 

정말 왜 안되나 하다가 어떤 사람이 수포자의 답안을 잘 못 넣고 비교했다는 내용을 보게 됐다. 

설마 나는 아니겠지..? 하면서 봤는데 2번 수포자의 찍는 방식에 5를 빠트리고 배열을 만든것이였다..... 하....

맞는 배열 : p2:[2, 1, 2, 3, 2, 4, 2, 5],

틀린 배열 :p2:[2, 1, 2, 3, 2, 4, 2],

ㅋㅋㅋ 5까지 복사했어야 하는데 2까지만해서... 통과를 못했던 것이다. 

스트레스... 결론적으로..... 이걸 발견하고 통과를 할 수 있었다.

 

결론 : 정신을 차려..

 

최종 코드

function solution(answers) {
    const answer = [];
    const personObj = {
        p1:[1,2,3,4,5],
        p2:[2, 1, 2, 3, 2, 4, 2, 5],
        p3:[3,3,1,1,2,2,4,4,5,5]
    };
    const resultObj = {
        p1:0,
        p2:0,
        p3:0
    };
    
    //for - 수포자 3명
    for(const person in personObj){
        //for - answers 수
        for(let i=0; i < answers.length; i++){
            //값 같은지 체크
            if(personObj[person][i % personObj[person].length] === answers[i]){
                resultObj[person] += 1;
            }
        }
    }
    
    const max = Math.max(...Object.values(resultObj));
    //정답자
    for(const person in resultObj){
        if(max === resultObj[person]){
            answer.push(+person.charAt(person.length-1))
        }
    }
    
    //오름차순 정렬하여 리턴
    return answer.sort((a,b) => a-b);
}

 

 

 

제출한 내역

 

42.9 부분이 1번 문제를 겪었던 시간들.....

50 부분이 2번 문제인 수포자 값을 제대로 복사하지 못한 시간들...