본문 바로가기
[개발] 코딩테스트/프로그래머스

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

by hmmmm_ 2022. 4. 23.

[문제 바로가기] 

완전탐색 > 모의고사 (Lv.1)

 

[ 문제 파악 ]

완전탐색 문제

 

[ 적용한 풀이 ]

function solution(answers) { // 문제 이렇게 슬플일이냐 ㅠㅠ
    const 수포자들 = [[1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]];
    let count = Array(3).fill(0);
    
    수포자들.map((수포자, index)=>{
        let 묶음 = Math.ceil(answers.length/수포자.length); //올림 
        for(let 묶 = 0; 묶 < 묶음; 묶++){
            수포자.map((찍음, idx)=>{
                if(찍음 == answers[수포자.length*묶+idx]) count[index]++
            })
        }
    })

    let answer = [];
    let maxValue = Math.max(...count);
    count.map((c,idx) =>{
        if(c == maxValue) answer.push(idx+1)                            
    })
                                 
    return answer;
}

 

[해결 과정 중 실수한 부분 / 잡담]

완전탐색이라 버젓이 써있었는데도 주의깊게 보지 않아서인지 시간이 오래 걸렸다.

 

answers와 수포자 부분을 비교하는 코드를 작성할때, 

코드로 일을 시키는데 한꺼번에 다 끝내려고 하니 저런 가독성이 떨어지는 코드를 작성했다.

다른 사람들 풀이에서는 아래와 같이 같은 동작을 하지만

변수가 달라 여러번 적은 코드가 있었는데 그게 반복되더라도 훨씬 보기가 좋아보였다.

function solution(answers) {
  var answer = [];
  var a1 = [1, 2, 3, 4, 5];
  var a2 = [2, 1, 2, 3, 2, 4, 2, 5]
  var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

  // 각 수포자들의 정답 비교하는 부분
  var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length;
  var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length;
  var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length;
  var max = Math.max(a1c,a2c,a3c);
    
  if (a1c === max) {answer.push(1)};
  if (a2c === max) {answer.push(2)};
  if (a3c === max) {answer.push(3)};
    
  return answer;
}

왼쪽이 나의 코드 / 오른쪽이 남의 코드 : 속도가 너무 들쭉날쭉한데 그렇다고 빠르게 계산된 부분이 엄청 빠르지도 않다.

 

[관련 문제 혹은 비슷한 문제]

완전탐색 

 

댓글