고민중인 문제2(해결)

Dongs·2023년 2월 27일
0

프로그래머스 1단계

모의고사 (완전탐색)

  • 기존코드
function solution(arr) {
    var answer = [];
    let p1 = [1,2,3,4,5];
    let p2 = [2,1,2,3,2,4,2,5];
    let p3 = [3,3,1,1,2,2,4,4,5,5];  //수포자 3명의 답 찍는 패턴.
    let cnt1 = 0; //p1 몇개 맞췄는지 카운트.
    let cnt2 = 0; //p2 몇개 맞췄는지 카운트.
    let cnt3 = 0; //p3 몇개 맞췄는지 카운트.
    
    let pIdx = 0; //수포자배열의 인덱스.
    
    for(let i=0; i<arr.length; i++){ //p1
        if(p1[pIdx] == arr[i]){
            cnt1 += 1;
        }   //같으면 맞춘 갯수 ++
        if(pIdx == p1.length-1){ //매개변수 배열이 p1,p2,p3 보다 길 수 있으므로 다시 순환하기 위해 pIdx를 초기화.
            pIdx = -1;
        }
        pIdx++;
    }
    pIdx = 0;
    
    for(let i=0; i<arr.length; i++){ //p2
        if(p2[pIdx] == arr[i]){
            cnt2 += 1;
        }   //같으면 맞춘 갯수 ++
        if(pIdx == p2.length-1){
            pIdx = -1;
        }
        pIdx++;
    }
     pIdx = 0;
    for(let i=0; i<arr.length; i++){ //p3
        if(p3[pIdx] == arr[i]){
            cnt3 += 1;
        }   //같으면 맞춘 갯수 ++
        if(pIdx == p3.length-1){
            pIdx = -1;
        }
        pIdx++;
    }

    
    if(cnt1==cnt2 && cnt2==cnt3 && cnt1==cnt3){
        if(cnt1==0 && cnt2==0 && cnt3==0){
            return answer;
        }
        answer.push(1,2,3);
    } else if(Math.max(cnt1, cnt2, cnt3) && cnt1 == cnt2){
        answer.push(1,2);
    } else if(Math.max(cnt1, cnt2, cnt3) == cnt2 && cnt3){
        answer.push(2,3);
    } else if(Math.max(cnt1, cnt2, cnt3) == cnt3 && cnt3 == cnt1){
        answer.push(1,3);
    } else {
        if(Math.max(cnt1, cnt2, cnt3) == cnt1){
            answer.push(1);
        } else if(Math.max(cnt1, cnt2, cnt3)==cnt2){
            answer.push(2);
        } else if(Math.max(cnt1, cnt2, cnt3) == cnt3){
            answer.push(3);
        }
    }
  
        
        
        
    return answer.sort((a,b) => a-b);
}

왜 안될까 계속 코드를 살펴보고 고민하고 반례를 찾다가 문제점을 하나 발견했다.

바로 두번째 else if 문의 조건이다!

else if(Math.max(cnt1, cnt2, cnt3) == cnt2 && cnt3){
	answer.push(2,3);
}

세 수 중에 가장 큰 값이 cnt2 이고 이 값이 cnt3 과 같을 때에 조건문이 실행되게 해야 했었는데 조건을 그냥 && cnt3 이라고만 적어서 테스트케이스 5, 7번이 통과가 안되었다.

else if(Math.max(cnt1, cnt2, cnt3) == cnt2 && cnt2== cnt3){
	answer.push(2,3);
}

위와 같이 수정하여 해결했다!

같은 실수를 반복하지 말자..

profile
자대고 css 하는 프론트엔드 개발자

0개의 댓글