min

프로그래머스 모의고사 자바스크립트 본문

알고리즘

프로그래머스 모의고사 자바스크립트

minprogramming 2023. 6. 19. 11:48

<문제>

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

 

프로그래머스

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

programmers.co.kr

<나의 풀이>

function solution(answers) {
    const one = [1,2,3,4,5]
    const two = [2, 1, 2, 3, 2, 4, 2, 5]
    const thr = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    const answer = [0,0,0]
    const result = []
    for(i in answers) {
        if(answers[i] === one[i % one.length]) answer[0]++;
        if(answers[i] === two[i % two.length]) answer[1]++;
        if(answers[i] === thr[i % thr.length]) answer[2]++;
    }
    for(i in answer) {
        if (answer[i] === Math.max(...answer)) result.push(Number(i)+1)
    }
    return result;
}

<다른 사람의 풀이>

const solution = (answer) => {
  let one = [1, 2, 3, 4, 5]; //5
  let two = [2, 1, 2, 3, 2, 4, 2, 5]; //8
  let three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; //10
  let result = [];
  const correct = (arr) => {
    return answer.filter((e, i) => e === arr[i % arr.length]).length;
  };
  let ans = [correct(one), correct(two), correct(three)]; // [5,0,0 ]

  //검사를 한다.
  //for무늘 돌면서 각 수가 최댓값인지를 확인한다.
  //만약에 최댓값이라면 그 수가 들어있는 배열에 인덱스를 answer에 담아서 출력을 한다.

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

  return result;
};

이 풀이에서는 함수로 반복되는 작업들을 처리해서 굉장히 효율적인 코드를 작성해서 가져왔다.

나는 반복문에서 조건문으로 처리를 했는데 지금 생각해보면 함수로 처리하는 것이 더 좋을 거 같다는 생각이 들었다.