[TIL] 모의고사

이현동·2023년 1월 30일
0

TIL

목록 보기
18/59

문제

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력 예

나의 코드

function solution(answers) {
    const supoja = [
        [1, 2, 3, 4, 5],
        [2, 1, 2, 3, 2, 4, 2, 5],
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
    ];
    const supojaLength = [supoja[0].length, supoja[1].length, supoja[2].length];

    const num = [0, 0, 0];
    const answer = [];

    for (let i = 0; i < answers.length; i++) {
        for (let j = 0; j < supojaLength.length; j++) {
            if (answers[i] === supoja[j][i % supojaLength[j]]) num[j]++;
            // answers[0] === supoja[0][0]
            // answers[0] === supoja[0][1]
            // answers[0] === supoja[0][2]
            // 위와 같이 비교하여 서로 같은 값일떄 배열에 count를 + 해준다.
        }
    }

    const maxNum = Math.max(...num); // num배열의 최고값을 구한다.

    num.forEach((a, i) => {
        if (a === maxNum) {
            //a와 maxNum의 값을 비교하여 같으면 answer배열에 +1씩 해준다.
            answer.push(i + 1);
        }
    });

    return answer;
}

처음 문제를 봤을 때 부터 이해가 쉽지 않았다. 천천히 읽어 보고서야 사람마다 일정 답을 찍는 패턴(고정된 값)이 있었고, answer의 배열과 비교했을 때 같으면 정답처리 되고 제일 많이 맞힌 사람을 찾는 문제였다.

처음 생각

처음에는 answer의 배열 길이가 짧을 때는 문제가 없지만, 찍는 패턴보다 길어졌을 때 비교가 힘들어져서 그냥 수포자의 배열들을 answer 배열의 길이만큼 늘려주고 비교하려고 했다. 그래서 코드를 써내려 가는데 점점 길어지고 이게 맞나 싶었다.. 결국 풀기는 풀었지만.. 이렇게 풀라고 만든 문제가 아닌 것 같았다. 😂

다른 사람의 코드

위의 풀이가 다른 사람의 코드인데, if (answers[i] === supoja[j][i % supojaLength[j]]) num[j]++; 부분이 이해가 되질 않았다. 왜 %로 나눠주는지.. 천천히 반복문을 따라가다 보니까 알 수 있었는데, 1 % 8일 때, i가 8이 될 때까지 나머지 값은 i일 것이다.. 그래서 수포자의 배열을 늘리지 않고도(?)확인을 할 수 있었던 것..ㅠ
저 값이 나오는 걸 알고는 있었지만 이렇게도 활용을 할 수 있구나를 알게 되었다..!

profile
https://hdlee.dev

0개의 댓글