-
안녕하세요. 오늘은 자바스크립트 알고리즘 모의고사 를 풀어보았습니다.
문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
제한 조건
- 시험은 최대 10,000 문제로 구성되어있습니다.
- 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
- 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
입출력 예
문제 풀이
function solution(answers) { let soopo1 = [1,2,3,4,5]; let soopo2 = [2,1,2,3,2,4,2,5]; let soopo3 = [3,3,1,1,2,2,4,4,5,5]; let student = [0,0,0]; for (let i = 0; i < answers.length; i++){ if(soopo1[i % soopo1.length] === answers[i]){ student[0] += 1; }; if(soopo2[i % soopo2.length] === answers[i]){ student[1] += 1; }; if(soopo3[i % soopo3.length] === answers[i]){ student[2] += 1; }; }; let max = Math.max(student[0], student[1], student[2]); let result = []; for (let i = 0; i < student.length; i++){ if(student[i] === max){ result.push(i + 1); }; }; return result; }; // 아래는 테스트 코드입니다. console.log(solution(1,3,4,5,6));
저의 풀이입니다.
우선 수포자들이 찍는 방식을 soopo1 부터 soopo3 까지 변수로 만들어주고
학생수가 3명이니까 student 변수를 [0,0,0] 배열로 만들어 줍니다.
그 후 for 반복문을 사용하여 answers.length 값만큼 반복해줍니다.
여기서 각각의 soopo 변수에 따라서 if 조건문을 세개 사용하는데,
만약 soopo1 ( [i % soopo1.length] == answers[i] ) 라면 student[0] 에 1씩 더해주고,
soopo2 ( [i % soopo2.length] == answers[i] ) 라면 student[1] 에 1씩 더해주고,
soopo3 ( [i % soopo3.length] == answers[i] ) 라면 student[2] 에 1씩 더해줌으로써
학생 세명의 점수를 각각 더해줍니다.
그리고 이 셋중에 가장 점수가 높은 학생을 구해야 하기 때문에 max 변수를 만들고
그 변수에 Math.max() 메소드를 사용하여 student[0], student[1], student[2] 중 가장 높은 숫자를 가진 요소를 넣어줍니다.
그리고 결과값인 result 변수를 생성해주고 for 반복문을 사용하여 student.length 학생수만큼 반복해주는데
만약 student[i] 특정 학생의 점수값이 변수 max 에 들어간 최고점수와 같다면
result 에 push( i + 1 )를 해주면서 풀 수 있습니다.
마지막으로 더 간단하게 푼 다른 사람들의 풀이를 보면서 글 마치겠습니다.
다른 사람들의 풀이
function solution(answers) { var answer = []; var a1 = [1, 2, 3, 4, 5]; var a2 = [2, 1, 2, 3, 2, 4, 2, 5] var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length; var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length; var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length; var max = Math.max(a1c,a2c,a3c); if (a1c === max) {answer.push(1)}; if (a2c === max) {answer.push(2)}; if (a3c === max) {answer.push(3)}; return answer; }
'코딩 기록 > 자바스크립트 알고리즘' 카테고리의 다른 글
(자바스크립트 알고리즘) x만큼 간격이 있는 n개의 숫자 - kimyang-sun (0) 2020.10.11 (자바스크립트 알고리즘) 같은 숫자는 싫어 - kimyang-sun (0) 2020.03.24 (자바스크립트 알고리즘) K번째 수 - kimyang-sun (0) 2020.01.27 (자바스크립트 알고리즘) 완주하지 못한 선수 - kimyang-sun (0) 2020.01.27 (자바스크립트 알고리즘) 나누어 떨어지는 숫자 배열 - kimyang-sun (0) 2020.01.27 댓글