프로그래머스 모의고사

김금동·2021년 11월 12일
0

알고리즘

목록 보기
11/12

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

그 모의고사 아닙니다 문제이름이 '모의고사'입니다

function solution(answers) {
  const result = [];
  const CORRECT = 1;
  const WRONG = 0;
  //     1번수포자
  //     더 간결하게 푸는법?
  const rightsN1 = answers.reduce((acc, v, i) => {
    const ansIndex = i % 5;
    if (ansIndex === 0 && v === 1) {
      return acc + CORRECT;
    } else if (ansIndex === 1 && v === 2) {
      return acc + CORRECT;
    } else if (ansIndex === 2 && v === 3) {
      return acc + CORRECT;
    } else if (ansIndex === 3 && v === 4) {
      return acc + CORRECT;
    } else if (ansIndex === 4 && v === 5) {
      return acc + CORRECT;
    } else {
      return acc + WRONG;
    }
  }, 0);
  //     2번수포자
  const rightsN2 = answers.reduce((acc, v, i) => {
    const ansIndex = i % 8;

    if (
      (ansIndex === 0 || ansIndex === 2 || ansIndex === 4 || ansIndex === 6) &&
      v === 2
    ) {
      return acc + CORRECT;
    } else if (ansIndex === 1 && v === 1) {
      return acc + CORRECT;
    } else if (ansIndex === 3 && v === 3) {
      return acc + CORRECT;
    } else if (ansIndex === 5 && v === 4) {
      return acc + CORRECT;
    } else if (ansIndex === 7 && v === 5) {
      return acc + CORRECT;
    } else {
      return acc + WRONG;
    }
  }, 0);
  //     3번수포자
  const rightsN3 = answers.reduce((acc, v, i) => {
    const ansIndex = i % 10;
    if ((ansIndex === 0 || ansIndex === 1) && v === 3) {
      return acc + CORRECT;
    } else if ((ansIndex === 2 || ansIndex === 3) && v === 1) {
      return acc + CORRECT;
    } else if ((ansIndex === 4 || ansIndex === 5) && v === 2) {
      return acc + CORRECT;
    } else if ((ansIndex === 6 || ansIndex === 7) && v === 4) {
      return acc + CORRECT;
    } else if ((ansIndex === 8 || ansIndex === 9) && v === 5) {
      return acc + CORRECT;
    } else {
      return acc + WRONG;
    }
  }, 0);
  //     숫자비교
  const scores = [[1,rightsN1], [2,rightsN2], [3,rightsN3]];
  const maxScore = Math.max(rightsN1, rightsN2, rightsN3);
  scores.forEach((v) => {
    if (maxScore === v[1]) {
      result.push(v[0]);
    }
  });
  return result;
}

거의 문제 조건을 그대로 조건문으로 만든 후 채점하여 숫자비교한 것

function solution(answers) {
  const answer = []
  const a1 = [1,2,3,4,5]
  const a2 = [2,1,2,3,2,4,2,5]
  const a3 = [3,3,1,1,2,2,4,4,5,5]
  
  const a1r = answers.filter((el,i)=> el === a1[i%a1.length]).length
  const a2r = answers.filter((el,i)=> el === a2[i%a2.length]).length
  const a3r = answers.filter((el,i)=> el === a3[i%a3.length]).length
  
  const max = Math.max(a1r,a2r,a3r)
  if(max === a1r){answer.push(1)}
    if(max === a2r){answer.push(2)}
    if(max === a3r){answer.push(3)}
    
    return answer
}

filter()가 배열을 거른다는 것을 이용해서 마치 문제맞춘걸 거르는 거처럼 보이도록 활용했다. 훨씬 깔끔해보이고 빠르기까지하다ㅋㅋ

profile
나원래chu해

0개의 댓글