[매일코딩-프로그래머스] 모의고사 03

2021. 11. 29. 10:42WEB Dev/CordingTEST

728x90

 

출근하면서 이 문제를 잠깐 생각했는데,

배열의 인덱스마다 비교해야 하니까 인덱스별로 비교할 수 있는 배열 메소드를 찾아보기로 했다.

 

배열의 내장 메소드들

https://opentutorials.org/module/3989/26231

 

배열 객체 메소드 - JavaScript

배열 객체 메소드 2019-08-01 18:35:54 배열 객체 메소드 Array 객체가 갖고 있는 메소드들에 대해 알아봅니다. 함수들을 이용하여 배열을 효과적으로 사용할 수 있습니다.   함수의 종류가 많고, 활용

opentutorials.org

일단 인덱스를 사용해서 쓸 수 있는 여러가지 메소드 들 중에

forEach나 map을 쓰는게 가장 적절한 것 같았다.

forEach보다 map을 더 많이 쓰고 권장하기때문에 map()함수로 만들어보려고 한다.

function solution(answers) {
    
    var check = [];

    var one =  [1, 2, 3, 4, 5, 1, 2, 3, 4, 5];
    var two =  [2, 1, 2, 3, 2, 4, 2, 5, 2, 1];
    var three =  [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];


    var checkArr = answers.map((a, i)=>{
        check.push(a==one[i]);
        return check;
    });
   
    return check;
}

 

우선 answers랑 비교해야하는데 student의 답이 학생1은 5개씩 반복, 학생2는 8개씩 반복, 학생3은 10개씩 반복하기 때문에 모든 학생의 반복 배열을 10개씩으로 맞췄다. 그리고 기존에 객체로 만들었던 것도 개별 변수로 나눠서 할당했다.

 

check라는 빈 배열을 선언하고 check에 push 메소드로 map의 인자로 돌아가는 answers의 원소와 학생 one의 i를 비교해 집어 넣어준다.

 

테스트를 위해 answer 대신 check를 반환해주면 테스트 1에서는 [true,true,true,true,true] 라는 결과값을 준다. 모두 맞았다는 뜻이다.

그러면 이것을 각각 돌려서 학생마다 true가 몇 개인지 알아내고 학생이름을 정렬해주면 될 거 같다.

 

그래서 오늘도 여기까지 만들었다ㅠㅠ

function solution(answers) {
    
    var check = [];
    var student = {
        1: [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
        2: [2, 1, 2, 3, 2, 4, 2, 5, 2, 1],
        3: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
    };

    answers.map((a, i)=>{
         check.push(a == Object.values(student)[0][i]);
        
        return check;
    })
    
    var oneChk = check.filter(function(element){
        return element==true;})
    
    return oneChk.length;
}

 

내가 너무 복잡하게 생각하는거 같기도 하고.. 내일 해결 못하면 질문하기에서 힌트를 좀 찾아야겠다....!!

 

728x90