24/1/4

Laejun Kim·2024년 1월 4일
0

TIL

목록 보기
67/89
post-thumbnail

연습문제 풀이

모의고사

출처)https://school.programmers.co.kr/learn/courses/30/lessons/42840#
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.

<내 풀이>

function solution(answers) {
    let one=[1,2,3,4,5];
    let two=[2, 1, 2, 3, 2, 4, 2, 5];
    let three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    
    let answer=[]
    
  while (one.length < answers.length) {
    one = one.concat(one.slice(0, answers.length - one.length));
  }

  while (two.length < answers.length) {
    two = two.concat(two.slice(0, answers.length - two.length));
  }

  while (three.length < answers.length) {
    three = three.concat(three.slice(0, answers.length - three.length));
  }
    let oneAnswer=0
    let twoAnswer=0
    let threeAnswer=0
    answers.forEach((el,idx)=>{
        if(el===one[idx]){oneAnswer++}
        if(el===two[idx]){twoAnswer++}
        if(el===three[idx]){threeAnswer++}
    })
    
    
    console.log(oneAnswer,twoAnswer,threeAnswer)
    
    let maxAnswer = Math.max(oneAnswer, twoAnswer, threeAnswer);
    if (oneAnswer === maxAnswer) answer.push(1);
    if (twoAnswer === maxAnswer) answer.push(2);
    if (threeAnswer === maxAnswer) answer.push(3);
    return answer;
}
  1. 먼저 1번 수포자, 2번 수포자, 3번 수포자가 각각 정답을 찍는 수열의 최소 패턴을 정의한다.

  2. 출제되는 문제(answers 의 길이)의 수가 얼마나 길어질지 모르기 때문에 세 학생의 답안에 해당하는 배열의 길이를 answers 길이와 같게 만들어 주어야 한다. 그것을 위해 while 문을 활용, 각 학생이 정답을 찍는 패턴은 유지하면서 주어진 answers 배열의 길이에 맞춰야 하기 때문에 concat을 사용하여 붙여주며 이때 붙이는 부분은 slice 로 만든다.

    slice에서 두번째 인자가 배열 끝 index보다 커질 경우 자동으로 마지막 요소까지 선택이 되기 때문에 문제가 되지 않는다.

  3. 그 이후엔 정답 배열과 각 학생의 답안 배열을 비교해서 각 학생의 정답 개수를 세어주기만 하면 된다.

  4. 마지막으로 Math.max로 최고점을 구해낸 다음 해당 최고점을 가진 학생을 answer 배열에 넣으면 끝.

0개의 댓글