코딩 테스트 준비

수포자 문제(완전 탐색) Level 1

개발쉐발 2022. 10. 6. 14:29
728x90
반응형

문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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){	     
	var answer = [];
	var su_1 = [1, 2, 3, 4, 5];
	var su_2 = [2, 1, 2, 3, 2, 4, 2, 5];
	var su_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
	// 문제 형식을 미리 지정
        
	var result = [0, 0, 0];
	// 문제 맞힌 수를 위한 값
	 
	for(let i = 0; i <= answers.length; i++){
              if(su_1[i%5] == answers[i]) result[0]++;
              if(su_2[i%8] == answers[i]) result[1]++;
              if(su_3[i%10] == answers[i]) result[2]++; 
	}
	// 길이마다 반복해서 값 증가
        
        const maxValue = Math.max(...result);
        let index = 0;
	
	for (let i = 0; i < 3; i++) {
		if (maxValue === result[i]) {
			answer[index] = i + 1;
	        index++;
	    }
	}
	// i와 index가 같이 증가하며 가장 높은 값을 가진 숫자가 첫번째에 오게 if 문으로 설정함.
	return answer;
}

프로그래머스 답안

function solution(answers) {
    var answer = [];
    var a1 = [1, 2, 3, 4, 5];
    var a2 = [2, 1, 2, 3, 2, 4, 2, 5]
    var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

    var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length;
    var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length;
    var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length;
    // 이렇게 하면 filter로 맞는 값들만 걸러지고 그 배열의 길이를 구하는 것
    var max = Math.max(a1c,a2c,a3c);

    if (a1c === max) {answer.push(1)};
    if (a2c === max) {answer.push(2)};
    if (a3c === max) {answer.push(3)};


    return answer;
}

 

Filter 함수 이해를 위한 정리

const numbers = [1];

numbers.filter((number, index, source) => { 
    // number: 요소값
    // index: source에서 요소의 index 
    // source: 순회하는 대상

    console.log(number); // 1 
    console.log(index); // 0 
    console.log(source); // [1]
    return number > 3;
});



https://7942yongdae.tistory.com/49

 

Javascript - Array filter 사용법

이번에는 Javascript의 array가 가진 filter 함수의 정의와 사용법 더불어 활용법에 대해 이야기해보려고 합니다. array의 함수 중 가장 많이 쓰이는 함수 중 3 대장이라고 할 수 있는 것이 map, filter, reduc

7942yongdae.tistory.com

 

 

 

728x90
반응형