[프로그래머스] 모의고사

프로그래머스 코딩테스트 연습문제 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를
전부 찍으려 합니다. 수포자는 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함수 정리해서 기록하기 메..모..