[프로그래머스] 모의고사(JS)

chooing·2022년 3월 14일
0

프로그래머스

목록 보기
2/4

전체코드

function solution(answers) {
    const studentArr = [
      [1, 2, 3, 4, 5],
      [2, 1, 2, 3, 2, 4, 2, 5],
      [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
    ];

    const result = [];
    studentArr.reduce((acc, cur, i) => {
      for (let i = 0; i < answers.length; i++) {
        answers[i] === cur[i%cur.length] ? (acc += 1) : acc;
      }
      result.push(acc);
      return (acc = 0);
    }, 0);

    return result.reduce((acc, cur, i) => {
      if (Math.max(...result) <= cur) acc.push(i + 1);
      return acc;
    }, []);
}

문제풀이

1.학생들의 찍는 방식을 2차배열로 정리한다.

    const studentArr = [
      [1, 2, 3, 4, 5],
      [2, 1, 2, 3, 2, 4, 2, 5],
      [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
    ];

2.reduce와 for을 이용하여 각 학생의 점수를 result에 넣는다.

	const result = [];
    studentArr.reduce((acc, cur, i) => {
      for (let j = 0; j < answers.length; j++) {
        answers[j] === cur[j%cur.length] ? (acc += 1) : acc;
      }
      result.push(acc);
      return (acc = 0);
    }, 0);
  • acc: i번째 학생 점수 (초기값 0으로 설정)
  • cur: i번째 학생의 찍는 방식
  • for 반복문으로 답지 배열 (answers)과 학생의 찍은 방식(cur)을 대조하여 답이 같으면 학생의 점수(acc)를 1씩 증가 시킨다.
    -->cur[j%cur.length]: 학생의 찍는 패턴은 똑같으므로 문제 번호(j)에 학생의 찍는 방식 배열의 길이(cur.length)를 나눈 나머지([j%cur.length])번째 값이 학생이 해당 문제(j)에 적은 답이다.
  • 반복문을 완료하면 학생의 점수를 모아두는 배열(result)에 넣고 학생의 점수(acc)를 다시 0으로 만든다.

3.result에 있는 점수의 최대값을 찾아 값을 return한다.

    return result.reduce((acc, cur, i) => {
      if (Math.max(...result) === cur) acc.push(i + 1);
      return acc;
    }, []);
  • acc: solution 함수의 return 값
  • cur: i번째 학생의 점수
  • Math.max(...result): 학생들 중 최고 점수
  • 학생들 중 최고 점수와 i번째 학생의 점수를 비교하여 같으면 acc에 i번째 학생을 넣는다.(acc.push(i + 1))

여담

profile
멋찐 프론트엔드 개발자가 되기 위해 공부 중입니다

0개의 댓글

관련 채용 정보