hani:) 2023. 6. 19. 19:20

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

최종 제출

function solution(answers) {
    let pattern1 = [1, 2, 3, 4, 5];
    let pattern2 = [2, 1, 2, 3, 2, 4, 2, 5];
    let pattern3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

    let temps = [0, 0, 0];
    let totallen = answers.length;
    for (let i=0; i<totallen; i++) {
        if (pattern1[i%5] === answers[i]) {
            temps[0]++;
        }
        
        if (pattern2[i%8] === answers[i]) {
            temps[1]++;
        }
        
        if (pattern3[i%10] === answers[i]) {
            temps[2]++;
        }         
    }
    
    let result = [];
    let index = 0;
    let maxVal = Math.max(...temps); // 최대 값 구하기
    for (let i=0; i<3; i++) {
        if (temps[i] === maxVal){
            result[index] = i+1;
            index++;
        }
    }
    
    return result;
}

 

해설

  1. 세명의 정답 패턴을 배열에 저장 (pattern1, pattern2, pattern3)
  2. 정답 개수를 저장해줄 변수 선언 (temps, 인덱스로 사람 별 정답 개수를 관리)
  3. for문을 사용하여 요소 및 정답에 접근하여 정답을 맞힌 문제 개수 관리
    1. 사람별로 정해진 패턴이 다르기 때문에 % 연산자 사용하여 사람별로 정해진 인덱스에 접근
    2. 패턴과 정답이 일치하는 경우 증감 연산자 사용하여 정답 개수 증가
  4. 결과 값을 저장한 temps에서 Math.max()를 사용하여 최대 값 구함
  5. for 문을 사용하여 요소에 접근, 최대 값과 동일한 값 저장되어 있으면 수포자의 번호를 넣어줌 (수포자의 번호: index)
728x90