코딩 테스트 - 모의고사
문제설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해주세요.
접근
- 전체의 경우를 구하기위해 반복되는 패턴을 배열화시킨다
- 각각 맞은 경우에 대한 변수를 만들어준다.
- 점수를 표현한 변수를 비교해서 각각의 경우에 대해 순서를 push한다.
코드
function solution(answers) {
var answer = [];
const a = [1,2,3,4,5];
let aScore = 0;
const b = [2,1,2,3,2,4,2,5];
let bScore = 0;
const c = [3,3,1,1,2,2,4,4,5,5];
let cScore = 0;
//정답 개수 확인 반복문
for(let i = 0; i < answers.length; i++) {
if( answers[i] === a[i % 5] ) {
aScore++;
};
if( answers[i] === b[i % 8 ] ) {
bScore++;
};
if( answers[i] === c[i % 10] ) {
cScore++;
}
}
//각각의 점수를 비교하여 경우에 따른 순서를 answer에 push
if( aScore > bScore ) {
if(aScore > cScore) {
answer.push(1);
} else if(aScore < cScore) {
answer.push(3);
} else {
answer.push(1);
answer.push(3);
}
} else if( bScore === aScore) {
if (cScore > bScore) {
answer.push(3);
} else if (cScore < bScore){
answer.push(1);
answer.push(2);
} else {
answer.push(1);
answer.push(2);
answer.push(3);
}
} else {
if (bScore > cScore) {
answer.push(2);
} else if(bScore === cScore) {
answer.push(2);
answer.push(3)
} else {
answer.push(3)
}
}
return answer;
}
완전탐색
function solution(answers) {
var answer = [];
const a = [1,2,3,4,5];
let aScore = 0;
const b = [2,1,2,3,2,4,2,5];
let bScore = 0;
const c = [3,3,1,1,2,2,4,4,5,5];
let cScore = 0;
//정답 개수 확인 반복문
for(let i = 0; i < answers.length; i++) {
if( answers[i] === a[i % 5] ) {
aScore++;
};
if( answers[i] === b[i % 8 ] ) {
bScore++;
};
if( answers[i] === c[i % 10] ) {
cScore++;
}
}
//각각의 점수를 비교하여 경우에 따른 순서를 answer에 push
if( aScore > bScore ) {
if(aScore > cScore) {
answer.push(1);
} else if(aScore < cScore) {
answer.push(3);
} else {
answer.push(1);
answer.push(3);
}
} else if( bScore === aScore) {
if (cScore > bScore) {
answer.push(3);
} else if (cScore < bScore){
answer.push(1);
answer.push(2);
} else {
answer.push(1);
answer.push(2);
answer.push(3);
}
} else {
if (bScore > cScore) {
answer.push(2);
} else if(bScore === cScore) {
answer.push(2);
answer.push(3)
} else {
answer.push(3)
}
}
return answer;
}
완전탐색
완전탐색은 간단히 가능한 모든 경우의 수를 다 체크해서 정답을 찾는 방법이다. 즉, 무식하게 가능한 거 다 해보겠다는 방법을 의미한다.
이 방법은 무식하게 한다는 의미로 "Brute Force"라고도 부르며, 직관적이어서 이해하기 쉽고 문제의 정확한 결과값을 얻어낼 수 있는 가장 확실하며 기초적인 방법이다.
예를 들어, 4자리의 암호로 구성된 자물쇠를 풀려고 시도한다고 생각해보자. 이 자물쇠가 고장난 것이 아니라면, 반드시 해결할 수 있는 가장 확실한 방법은 0000 ~ 9999까지 모두 시도해보는 것이다.(최대 10,000번의 시도로 해결 가능)
좋은 코드
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;
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;
}
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;
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를 이용하여 맞은 문항만 남기고 틀린 문항은 모두 지운 후 각 배열의 길이를 변수에 담은 후 그중 최대값을 max라는 변수에 Math.max를 이용하여 저장 => max값과 맞은 것들을 비교하여 같을 경우 answer에 push하여 순서에서도 틀리지않게 구성하셨다.
Author And Source
이 문제에 관하여(코딩 테스트 - 모의고사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimsupport/코딩-테스트-모의고사저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)