TIL17-03 반복된 규칙을 잘 활용하자

김태혁·2023년 1월 28일
0

TIL

목록 보기
61/205
  • 문제 설명

  • 풀이 과정

    • 처음에는 찍는 패턴을 .repeat으로 반복하려 했다.
    • 그리고 answers와 배열 원소간 비교를 하고, 정답 갯수를 각각 카운트하려 했다.
let no1 = "12345".repeat(20).split("").map(Number);
let no2 = "21232425".repeat(13).split("").map(Number);
let no3 = "3311224455".repeat(10).split("").map(Number);
let count1 = 0;
let count2 = 0;
let count3 = 0;
for (let i = 0; i < answer.length; i++){
    if (answer[i] == no1[i] ) {
        count1++
    }
}
for (let j = 0; j < answer.length; j++){
    if (answer[j] == no2[j] ) {
        count2++
    }
}
for (let k = 0; k < answer.length; k++){
    if (answer[k] == no3[k]) {
        count3++
    }
}
    • 이런식으로 접근했고, 각각의 count 값을 비교하여 가장 큰 값까진 구했다.
    • 다시 해당 수포자 번호로 바꿔주는 부분을 어떻게 할지에 대한 고민이 길어졌다.
    • 다른 사람의 풀이의 힌트를 얻어 for문을 3가나 쓰지 않고, 조금 줄였고, 해당 수포자 번호로 바꾸는 것도 성공했다.
function solution(answers) {
    let no1 = [1,2,3,4,5];  //1번 수포자 찍는방식
    let no2 = [2,1,2,3,2,4,2,5]; //2번 수포자 찍는방식
    let no3 = [3,3,1,1,2,2,4,4,5,5]; //3번 수포자 찍는방식
    let result = [0, 0, 0];  // 정답 갯수 받을 배열 초기화;
    for (let i = 0; i < answers.length; i++) {
        if( no1[i%5] === answers[i]) { // 1번 수포자는 5문제씩 반복이니 5로 나누는 나머지가 반복 
            result[0] ++                // 해당 하는 요소와 정답 비교 후 같다면 result[0]에 카운트
        }
        if( no2[i%8] === answers[i] ) { // 2번 수포자는 8문제씩 반복이니 8로 나누는 나머지가 반복 
            result[1] ++                // 해당 하는 요소와 정답 비교 후 같다면 result[1]에 카운트
        }
        if( no3[i%10] === answers[i]) { // 3번 수포자는 10문제씩 반복이니 10으로 나누는 나머지가 반복 
              result[2] ++              // 해당 하는 요소와 정답 비교 후 같다면 result[2]에 카운트
        }
    }
    let answer = [];
    let max = Math.max(...result); // 가장 정답 갯수가 많은 값 추출
    let index = 0;
    for (let i = 0; i < 3; i++) {
        if (max === result[i]) {  //max값과 result[i]와 같다면 해당 수포자가 1등
            answer[index] = i+1 ; // 1등 수포자는 index+1이고, answer[index]위치에 넣는다.
            index ++;
        }
    }    
    return answer;
}
    • 위의 처럼 인덱스의 초기화값을 선언하고, max값을 카운트된 값과 비교하여 맞다면 해당 인덱스에 넣고, 실제 수포자 번호는 +1 을 해주어 구했다.
profile
도전을 즐기는 자

0개의 댓글