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

2021. 11. 26. 10:46WEB Dev/CordingTEST

728x90

 

 

.filter() 메소드와 includes() 메소드 사용 해서 문제를 풀어보려고 한다.

 

우선 정답이 들은 배열은 answers다.

그리고 각각의 학생들은 1, 2, 3이 되고 학생마다 답안이 다르니 객체에 key와 value로 담는다.

각각의 value를 answer과 비교해 순서대로 key를 answer 배열에담고 오름차순으로 정렬한다.

 

    var student = {
        1: [1, 2, 3, 4, 5],
        2: [2, 1, 2, 3, 2, 4, 2, 5],
        3: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    };

 

answers가 더 큰 범위이니 객체[idx].filter(num=>answers.includes(num)) 를 출력해보자.

 

우선 반복문을 돌려야 할 것 같으니 객체의 key 값 숫자를 가지고 오는 Object.keys(student).length 로 객체의 key쌍의 갯수를 찾아낸다.

그리고 compare이라는 변수에 빈 배열을 초기화하고(할당하고), for문으로 배열 answers의 값들과 Object.values(student)와 filter로 비교해서 빈 배열인 compare에 집어넣는다.

이것은 맞는 배열의 갯수를 1번 사람, 2번 사람, 3번 사람의 맞은 정답 갯수를 보여준다.

 

function solution(answers) {
    
    var student = {
        1: [1, 2, 3, 4, 5],
        2: [2, 1, 2, 3, 2, 4, 2, 5],
        3: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    };
    
    var lengthOfStudent = Object.keys(student).length;
    
        var com = []; 
        for(var i=0; i<lengthOfStudent; i++){
            com.push(Object.values(student)[i].filter(q=>answers.includes(q)).length);
        }
   
    return com;
}

 

이렇게 하면 테스트 케이스 1에서 [5, 8, 10]이 나오는데 여기서 안게 filter는 순서를 비교하는게 아니고 그냥 교집합을 찾는거였다.

 

아악😩

 

 

728x90