프로그래머스 코딩테스트 연습문제 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를
전부 찍으려 합니다. 수포자는 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함수 정리해서 기록하기 메..모..
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 체육복 (0) | 2022.08.23 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2022.08.21 |
[프로그래머스] [카카오 인턴] 키패드 누르기 (0) | 2022.08.20 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.08.19 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.04.07 |
Comment