몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 2] 모의고사 {언어 : JavaScript} 본문

알고리즘

프로그래머스 [Lv. 2] 모의고사 {언어 : JavaScript}

스위태니 2024. 3. 13. 00:45

문제 링크

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

 

프로그래머스

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

programmers.co.kr

정답 코드

function solution(answers) {
    const one = Array(10000).fill(1).map((e, idx) => (e + idx) % 5 ? (e + idx) % 5 : 5)
    const assistTwo = [2, 1, 2, 3, 2, 4, 2, 5]
    const two = Array(10000).fill().map((e, idx) => assistTwo[idx%8])
    const assistThree = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    const three = Array(10000).fill().map((e, idx) => assistThree[idx%10])
    const resultDict = {
        1: 0,
        2: 0,
        3: 0
    }
    answers.forEach((e, idx) => {
        if (one[idx] == e) {
            resultDict[1] += 1
        }
        if (two[idx] == e) {
            resultDict[2] += 1
        }
        if (three[idx] == e) {
            resultDict[3] += 1
        }
    })
    const answer = [1];
    [2, 3].forEach((e) => {
        if (resultDict[answer[0]] === resultDict[e]) {
            answer.push(e)
        } else if (resultDict[answer[0]] < resultDict[e]) {
            while (answer.length) {
                answer.pop()
            }
            answer.push(e)
        }
    })
    return answer;
}

풀이 방법

  1. 수포자 3명의 리스트를 만들어줬다.
  2. 몇 개 맞췄는지 알 수 있게 딕셔너리에 맞춘 문제 만큼 1을 더해줬다.
  3. 1을 먼저 넣고 2와 3을 비교했다.
    1. 들어있는 리스트의 수포자의 맞춘 문제수와 비교한다.
      1. 같으면 현재 수포자를 answer에 넣는다.
      2. 현재 수포자의 맞춘 문제수가 많은 경우 answer를 비운다.
  4. 마지막으로 answer를 출력하는데 어차피 1, 2, 3 순으로 비교하므로 정렬은 필요없다.

느낀점

  • 귀찮은 문제일 수록 단순하고 직관적이게 푸는 것이 좋아보인다.