[TIL] <2020.05.20> 프로그래머스 (모의고사, 같은 숫자는 싫어)

이성진·2020년 5월 20일
0

TIL

목록 보기
3/9

오늘도 프로그래머스 문제 푼 것을 정리하는 시간을 가지도록 하겠습니다.

첫 번째 문제로는 머리를 데울겸 같은 숫자는 싫어
두 번째 문제로 데운 머리를 쓸 수 있는 모의고사 문제를 준비했습니다.

모든 문제는 문제 설명을 알고 왔다는 전제하에 설명합니다.

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;
}
profile
개발보다 회사 매출에 영향력을 주는 개발자

0개의 댓글