모의고사

Creating the dots·2021년 10월 12일
0

Algorithm

목록 보기
24/65
post-custom-banner

프로그래머스

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

나의 풀이

  • check 함수를 만들고 정답배열을 반복문 돌려 one, two, three 배열과 일치하는지 확인한다.
  • 정답배열의 길이(answers.length)와 수포자 1,2,3이 제출한 답안의 길이(one.length, two.length, three.length)가 똑같아야 한다.
  • 수포자 1,2,3이 제출한 답 패턴은 반복된다.
  • 수포자 1,2,3이 제출한 답 배열에 계속 push해주면서 i===answer.length가 될때까지 확인한다.
  • checkVal 함수를 만들고 배열의 세 요소 값을 비교하고 학생의 번호를 요소로 갖는 배열을 리턴한다.
function solution(answers) {
    let one = [1,2,3,4,5];
    let two = [2,1,2,3,2,4,2,5]; 
    let three = [3,3,1,1,2,2,4,4,5,5]; 
    
   //채점하고 정답 개수를 리턴하는 함수
    const check = (arr) => {
        let correct = 0;
        for(let i=0;i<answers.length;i++){
            if(answers[i]===arr[i]) correct ++
            arr.push(arr[i]);
        }
        return correct;
    }
    const oneRes = check(one);
    const twoRes = check(two);
    const threeRes = check(three);
    
    //배열의 값들을 비교하고 최댓값을 갖는 요소의 인덱스+1을 요소로 값는 배열 리턴하는 함수 
     const compareVal = (arr) => {
        const max = Math.max(...arr);
        const output = []
        for(let i=0;i<arr.length;i++){
            if(arr[i]===max) output.push(i+1); 
        }
        return output;
    }
    return compareVal([oneRes,twoRes,threeRes])
}

다른 사람 풀이

  • filter의 인자로 들어가는 콜백함수의 인자인 요소와 인덱스를 활용했다.
  • 수포자 1,2,3의 답은 패턴이 있다. a1은 a1[i] === a[i+5], a2는 a2[i] === a2[i+8], a3는 a3[i] === a3[i+10]이다.
  • 따라서 a[i] === a[i%a.length]이다.
function solution(answers){
  let answer = [];
  
  let a1 = [1,2,3,4,5];
  let a2 = [2,1,2,3,2,4,2,5]; 
  let a3 = [3,3,1,1,2,2,4,4,5,5];
  
  const a1c = answers.filter((a,i) => a === a1[i%a1.length]).length;
  const a2c = answers.filter((a,i) => a === a2[i%a2.length]).length;
  const a3c = answers.filter((a,i) => a === a3[i%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;
}

Array.prototype.filter()

arr.filter(callback(element[, index[, array]])[, thisArg])
element 처리할 현재 요소
index 처리할 현재 요소의 인덱스
array filter를 호출한 배열
thisArg callback을 실행할 때 this로 사용하는 값

내가 푼 방법은 반복문을 돌면서 배열의 크기가 계속 커졌는데, 다른 풀이를 보니 패턴과 filter를 활용해 훨씬 간단하게 풀었다. filter에서 인덱스를 사용할 수 있다는 걸 잊어버리는데 이 문제로 다시 복습할 수 있었다.

profile
어제보다 나은 오늘을 만드는 중
post-custom-banner

0개의 댓글