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

Hemudi | Hemdi·2021년 11월 13일
0

🧨 코딩테스트

목록 보기
10/19
post-thumbnail

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해주세요.

✳️ 입출력 예

answersreturn
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]

✳️ 내가 푼 코드

function solution(answers) {
    var answer = [];
    const student = {
        1 : [1,2,3,4,5],
        2 : [2,1,2,3,2,4,2,5],
        3 : [3,3,1,1,2,2,4,4,5,5]
    }
    
    let count = {
        1 : 0,
        2 : 0,
        3 : 0
    }
    
    for(let index = 0 ; index < answers.length ; index++){
        for(let num = 1 ; num <= 3 ; num++){
            if(student[num][index >= student[num].length ? index % student[num].length: index]
               === answers[index])
            count[num]++;
        }
    }

    if(count[1] >= count[2] && count[1] >= count[3]){ answer.push(1); }
    if(count[2] >= count[1] && count[2] >= count[3]){ answer.push(2); }
    if(count[3] >= count[1] && count[3] >= count[2]){ answer.push(3); }
    
    return answer;
}

✳️ 생각 정리

  • 1, 2, 3 번의 패턴을 따로 저장하지 않고 푸는 방법이 없을까 1시간 머리 굴리다 일단 포기...
  • student 객체에 각각 1,2,3 번의 답찍기 패턴을 배열로 저장
  • count 객체에 학생 별 정답 횟수를 기록
  • 2중 포문으로 입력된 정답지 answers 배열의 처음부터 끝까지 1번부터 3번의 학생들의 패턴을 각각 비교
  • index >= student[num].length ? index % student[num].length : index
    • 답찍기 패턴의 인덱스를 구하기 위한 삼항연산자
    • 정답지의 번호(index) 가 답찍기 패턴의 배열의 길이보다 긴 경우 모드 연산자를 사용해 구함
  • 그 다음은 좀 무식하게...삼항 연산자를 줄줄이 사용해서 3개의 수를 비교할까 했는데 그냥 if 문을 3개 사용해서 넣었다...
    • 1번이 2번과 3번보다 크거나 같은 경우
    • 2번이 1번과 2번보다 크거나 같은 경우
    • 3번이 1번과 3번보다 크거나 같은 경우
profile
'햄디'로 현재 코드스쿼드 코코아 과정 수강 중 💻 (티스토리로 이전)

0개의 댓글

관련 채용 정보