프로그래머스-1단계 모의고사 (완전탐색)

원동휘·2022년 10월 11일
0

프로그래머스

목록 보기
37/46

< 문제 >

이제는 이 풀이로 풀이되지않음. 수정필요 >

for문 풀이
먼저 문제에서 반복되는 포인트를 찾는다.
ex) 1번수포자는 1, 2, 3, 4, 5가 반복됨.
이렇게 반복되는 규칙을 미리 정의해두고 해당 index에 해당하는 count를 정의해둔다.


그 이후 index를 각 배열의 길이에 맞게 나누어 준다
a1기준 0~4의 index가 나올 수 있고, 5로 나눠줌으로써 가변적인 a1의 길이에 항상 원하는 위치에 index를 바라보도록 해준다.
< 효과 >
0%5=0 / 1%5=1 / 2%5=2 / 3%5=3 / 4%5=4
5%5=0 / 6%5=1 / 7%5=2 / 8%5=3 / 9%5=4
위와같이 a1에 규칙에따라 얼마나 많은 숫자를 찍어도 항상 arr[i % a1.length]가 특정 index를 가리키게하는 효과
그렇게 매개변수로 받아온 arr와 각 a1,a2,a3의 indexr값을 비교한 이후 각 index에 맞게 count에 추가.


그리고 Math.max로 count의 최대값을 구하고,
if조건문을 반복돌면서 최대값인값을 answer에 push해주는 풀이.
이때 push할때는 index는 0부터 시작임으로 0번째일때 1이 들어가도록 i + 1을 push해준다.

function solution(arr) {
  let answer = [];
  let count = [0, 0, 0];
  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];

  for (let i = 0; i < arr.length; i++) {
    if (a1[i] === arr[i % a1.length]) {
      count[0] = count[0] + 1;
    }
    if (a2[i] === arr[i % a2.length]) {
      count[1] = count[1] + 1;
    }
    if (a3[i] === arr[i % a3.length]) {
      count[2] = count[2] + 1;
    }
  }

  const max = Math.max(...count);

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

  return answer;
}

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

filter 풀이
위의 풀이와 거의 유사하지만 filter메소드를 이용해서 더 적은줄을 사용하여 더 간단하게 풀이
filter돌면서 위와같이 특정 index의 arr와 a1,a2,a3의 값을 비교해서 같은것만 filter해서 그길이를 구하고, 그길이들의 최대값을 Math.max로 구한후
if문으로 max값과 filter된 배열이 같은경우에만 각각 1,2,3을 push 해주는 풀이

function solution(arr) {
  let 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 a1c = arr.filter((item, idx) => item === a1[idx % a1.length]).length;
  const a2c = arr.filter((item, idx) => item === a2[idx % a2.length]).length;
  const a3c = arr.filter((item, idx) => item === a3[idx % a3.length]).length;

  const 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;
}

console.log(solution([1, 2, 3, 4, 5]));
console.log(solution([1, 3, 2, 4, 2]));
profile
Front-End Developer #Nextjs #React #Typescript

0개의 댓글