본문 바로가기

알고리즘 PS/Javascript

[JavaScript] 모의고사 - 완전탐색

반응형

프로그래머스 - 알고리즘 고득점 Kit 완전탐색 편

 

완전탐색 두 번째 문제입니다.

모의고사-js
모의고사

 

 

저의 코드는 복잡합니다..

학생1, 학생2, 학생3의 정답찍기 패턴과 정답 갯수를 묶어서 다루고 싶었습니다.

 

1. repeat을 통해서 정답찍기 패턴을 반복해서 생성할 수 있었습니다.

2. 정확하게 나눠떨어지지 않는다면 slice함수를 이용해서 추가해주었습니다.

3. for문을 돌면서 변형된 문자열을 돌면서 학생별로 정답을 누적합합니다.

4. 누적합의 최댓값을 구하고, 학생별로 result 배열에 추가해줍니다.

 

// 나의 풀이
function solution(answers) {
  let result = [];
  const len = answers.length;

  let student1 = ["12345", 0];
  let student2 = ["21232425", 0];
  let student3 = ["3311224455", 0];

  const transformed1 =
    student1[0].repeat(Math.floor(len / student1[0].length)) +
    student1[0].slice(0, len % student1[0].length);
  const transformed2 =
    student2[0].repeat(Math.floor(len / student2[0].length)) +
    student2[0].slice(0, len % student2[0].length);
  const transformed3 =
    student3[0].repeat(Math.floor(len / student3[0].length)) +
    student3[0].slice(0, len % student3[0].length);

  for (let i = 0; i < len; i++) {
    if (Number(transformed1[i]) === answers[i]) student1[1]++;
    if (Number(transformed2[i]) === answers[i]) student2[1]++;
    if (Number(transformed3[i]) === answers[i]) student3[1]++;
  }

  const maxCorrection = Math.max(student1[1], student2[1], student3[1]);

  if (student1[1] === maxCorrection) result.push(1);
  if (student2[1] === maxCorrection) result.push(2);
  if (student3[1] === maxCorrection) result.push(3);

  return result.sort((a, b) => a - b);
}

 


 

마지막에 오름차순 정렬을 하였는데, 이는 다시보니 불필요한 작업이었습니다.

 

다른 분의 풀이를 참고하니, repeat을 통해서 배열을 생성할 필요도 없었고,
처음부터 정수형 배열을 만들어줬습니다. 나머지 연산을 통해서 정답을 확인할 수 있었습니다.

 

// 다른 사람 풀이
function solution(answers) {
  var answer = [];
  var a1 = [1, 2, 3, 4, 5];
  var a2 = [2, 1, 2, 3, 2, 4, 2, 5];
  var a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

  var a1c = answers.filter((a, i) => a === a1[i % a1.length]).length;
  var a2c = answers.filter((a, i) => a === a2[i % a2.length]).length;
  var a3c = answers.filter((a, i) => a === a3[i % a3.length]).length;
  var max = Math.max(a1c, a2c, a3c);

  if (a1c === max) {
    answer.push(1);
  }
  if (a2c === max) {
    answer.push(2);
  }
  if (a3c === max) {
    answer.push(3);
  }

  return answer;
}

 

다음에는 완전탐색 3편으로 찾아오겠습니다.

반응형