js 코테

김재우·2024년 8월 5일
0

알고리듬

목록 보기
4/4

자바스크립트 코테 정복하기


프론트엔드 일년차가 되어 슬슬 이직을 준비할때가 온거같아 코테를 준비하려고 한다. 코테 책은 자바스크립트 코딩 테스트 합격자 되기라는 책으로 공부를 할 예정이고 , 과정은 9주차이다. 회사 끝나고 하루에 최대한 2문제씩 풀려고 한다.

1) 문제 : 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건

시험은 최대 10,000 문제로 구성되어있습니다.
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

문제유형 ) 완전탐색

풀이 )

function solution(answers) {
let score = [0,0,0]
let patterns= [[1,2,3,4,5],[2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]]
    
    for( [i,answers] of answers.entries()){
    for( [j,pattern] of patterns.entries()){
       if(answers === pattern[i % pattern.length]){
        score[j] +=1 
    }
   
    }    
    }
    
    let max = Math.max(...score)
    let highScore = []
    for(let i=0; i<score.length; i++){
        if(score[i] === max){
            highScore.push(i+1)
        }
    }
  return highScore
}

  • 이번 문제에서 배운점
    1.for of 문과 entries를 이용하면 배열을 순회하면서 index를 return 받을 수 있다.
    for([i,answer]of answers.entries())를 이용하면 answers 를 순회하면서 각 인덱스의 값과 인덱스 순서를 구조분해하여 할당받을 수 있다.
    그걸 이용하여 풀어보았다.
    한가지 주의할점은 처음에 if(answers === patterns[i] ) 랑 같을때 score[j] 의 점수를 올리게 했는데 그렇게 하다보니 나중에 패턴이 정답보다 적을때 테스트를 통과하지 못했다. 그래서 i % pattern.length 의 나머지 값을 === 인덱스의 순서를 찾아서 score 값에 더해줬다.

그리고 number 함수인 Math.max 로 최댓값을 구한뒤에
for 문을 돌려 score 를 순회하면서 스코어안에 가장 높은 점수를 받은 인덱스의 학생을 빈 배열에 push 해주었고 , 그 값을 리턴하여 풀었다.

profile
프론트엔드 꾸준개발자입니다.

0개의 댓글