코딩테스트
[프로그래머스] 모의고사
개발하는 봉구
2021. 4. 6. 22:30
프로그래머스 코딩테스트 연습문제 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를
전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
아래는 내가 제출한 풀이이다..!
function solution(answers) {
let a = [1,2,3,4,5]
let b = [2,1,2,3,2,4,2,5]
let c = [3,3,1,1,2,2,4,4,5,5]
// 수포자가 찍는 방식 경우의수를 각 변수에 담았다.
// 수포자 경우의 수와 정답 배열을 이용해 점수를 계산하는 함수를 생성했다.
const caculator = (array) => {
let count = 0;
let score = 0;
// 정답을 맞췄을 경우에 올라가는 score 변수와 정답이 담긴 배열의 순서를 count 변수에 담았다.
// for 반복문을 이용해 수포자 경우의 수와 정답배열을 비교했다.
for(let i = 0; i<answers.length;i++){
if(count===array.length) count = 0
// 정답 배열 길이와 count 값이 동일하면 count값을 초기화했다.
if(answers[i] === array[count]){
score++;
count++;
} else {
count++
}
}
return score
// 경우의 수와 정답 배열이 같을 경우 score와 count를 1씩 더했고 정답이 아닐 경우에는
// count만 증가했고 점수를 리턴한다.
}
let answerA = caculator(a)
let answerB = caculator(b)
let answerC = caculator(c)
let max = Math.max(answerA,answerB,answerC)
let answer = []
// 빈 정답 배열을 생성하고 각각의 변수에 경우의 수 별로 점수를 변수에 저장하고 max변수에 최대값
// 을 저장했다.
answerA === max && answer.push(1)
answerB === max && answer.push(2)
answerC === max && answer.push(3)
// 각 변수가 최고 점수 일 때 정답 배열에 순서대로 push
return answer
}
괜찮게 푼것 같았는데 다른 사람의 답안을 보니 훨씬 더 좋고 생각치도 못했던 풀이가 많았다..
어떻게 저런 생각을 하지???????????????????ㅠㅠ
코딩테스트 연습 문제를 풀면서 생각보다 Math 함수가 자주 사용 되었는데
아직 Math함수에 대해 제대로 파악하지 못한것 같다.
Math함수 정리해서 기록하기 메..모..