알고리즘 완전탐색

.·2021년 7월 4일
0

알고리즘

목록 보기
7/21

문제 설명

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

입출력 예

answers return
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]

접근법

  1. 반복이 시작되는 부분전까지 array를 만들어준다
  2. answers의 길이만큼 반복문을 돌려서 일치하면 값을 증가시켜준다
  3. 최댓값을 찾아서 정답 array에 넣어준다
function solution(answers) {
  const answer = [];
  //학생들 반복되기 전 구간까지 적어주기!!
  const student1 = [1, 2, 3, 4, 5];
  const student2 = [2, 1, 2, 3, 2, 4, 2, 5];
  const student3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

  let count = [0, 0, 0];
 
  for (let i = 0; i < answers.length; i++) {
    if (answers[i] === student1[i % student1.length]) count[0]++;
    if (answers[i] === student2[i % student2.length]) count[1]++;
    if (answers[i] === student3[i % student3.length]) count[2]++;
  }
  
  const max = Math.max(count[0], count[1], count[2]);

  for (let i = 0; i < count.length; i++) {
    if (count[i] === max) answer.push(i + 1);
  }

  return answer;
}

설명

  1. answer기준 i번째 index와 student의 i번째 index를 비교해야 하는데
    answer보다 student의 길이가 작아서 i번째가 없을 수 있다.
    i가 반복되는 것의 길이보다 커지면 다시 처음 인덱스부터 비교해야한다.
  • i % student.length 를 이용하면 된다(나머지 이용해주기!)
  • 예시 student=[2,3,3,1,5]일 때 항상 0,1,2,3,4 index 로 돌도록
  1. count=[0,0,0] 0번째는 1번학생이 맞춘 정답갯수 1번쨰는 2번학생이 맞춘 정답갯수
  2. Math.max로 count array중에 최댓값을 구한뒤
  3. count돌면서 max와 같은 것이 있으면 index+1을 정답 array에 넣는다
  • index순이기 때문에 점수 같더라도 오름차순으로 정렬된다
profile
Divde & Conquer

0개의 댓글

관련 채용 정보