본문 바로가기

카테고리 없음

[18번] [중급] 모의고사

문제

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

 

프로그래머스

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

programmers.co.kr

 

나의 답

[pseudo code]
1. answers를 string으로 변환
2. 각 수포자의 점수 찍는 방식을 중첩 어레이로 받아오고,
2. 입력받은 정답의 길이와 비교해서 패턴을 repeat으로 늘려줌
3. 수포자별 정답을 비교하는 재귀 함수생성, parameter 값으로 pattern 배열의 인덱스를 받아 올 것 
    - for loop로 학생별 맞힌 개수를 scores 변수에 담아줄 것
    - loop를 탈출하면 parameter 값을 올려줌
    - parameter 값이 2보다 작거나 같으면 재귀(num) 호출, 아니면 scores 배열을 반환
3. 세 명이 모두 동점이면, answer = [1,2,3]을 반환
4. 아닌 경우에는
    score 배열에서 max 값을 찾아 forEach() 함수로 max 값과 일치하는 요소의 index+1을 answer 배열에 push
5. return answer

 

  // 수포자의 정답 패턴을 문제 길이에 맞춰 늘려주기
  for (let i = 0; i < 3; i++) {
    let num = answers.length / patterns[i].length;
    if (num >= 0) {
      patterns[i] = patterns[i].repeat(num === 1 ? 1 : Math.floor(num) + 1);
    }
  }

  // 채점 함수
  function checkAns(num) {
    for (let i = 0; i < answers.length; i++) {
      answers[i] === patterns[num][i] ? scores[num]++ : num;
    }
    num++;
    return num <= 2 ? checkAns(num) : scores;
  }
  checkAns(0);

  // 채점 값을 배열의 최고값과 비교해 answer array에 정답자 push
  scores.forEach((e, i) =>
    e === Math.max(...scores) ? answer.push(i + 1) : answer
  );
  return answer;
}

console.log(solution[(1, 2, 3, 4, 5)]);
console.log(solution[(1, 3, 2, 4, 2)]);