오늘도 프로그래머스 문제 푼 것을 정리하는 시간을 가지도록 하겠습니다.
첫 번째 문제로는 머리를 데울겸 같은 숫자는 싫어
두 번째 문제로 데운 머리를 쓸 수 있는 모의고사 문제를 준비했습니다.
모든 문제는 문제 설명을 알고 왔다는 전제하에 설명합니다.
function solution(arr) {
// 답이 너무 짧아서 간단하게 설명하자면
// 배열이 주어지고(arr)
// 배열에서 연속되는 숫자를 한 개로 축소해서 반환하는 문제
return arr.filter((a, i) => a !== arr[i + 1])
// arr.filter의 조건을 a 와 그 다음 숫자가 같지 않을 때만 a를 반환
// 이러면 지금 숫자와 다음 숫자가 같은 때는 반환하지 않아도 됨
}
function solution(answers) {
const arr = [
[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
], // 학생 3 명의 찍는 순서를 배열로 정리
answer = [], res = [0, 0, 0];
// answer: 최종 승리 학생 res: 맞은 정답 수
arr.forEach((ar, i) => { // 각각의 학생의 정답 순서에 맞게 for문
answers.forEach((an, j) => { // 답안지의 정답에 맞게 for문
if (an === ar[j % ar.length]) res[i] += 1;
// 만약 답안지의 답과 학생이 찍은 답이 맞다면
// res의 학생 순서에 맞는 배열에 +1
})
})
const max = Math.max(...res.map(o => o), 0);
// res 배열을 하나 씩 돌아가면서 가장 큰 수를 max에 저장
const best = res.findIndex(a => a === max);
// max가 가장 큰 값이므로 res 배열에서 max가 있는 인덱스를 검색
res.forEach((r, i) => (r === res[best]) && answer.push(i + 1));
// 같은 점수가 여럿일 경우를 확인하고 여럿이면 그 사람도 answer에 푸쉬
return answer;
}