1. 문제
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
출처: programmers.co.kr/learn/courses/30/lessons/42840
2. 코드
1) 전체 코드
function solution(answers) {
var answer = [];
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]
let count = [0,0,0];
for (let i =0; i<answers.length; i++) {
if(answers[i] === a[i%5]) {
count[0]++;
}
if(answers[i] === b[i%8]) {
count[1]++;
}
if(answers[i] === c[i%10]) {
count[2]++;
}
}
const maxCount = Math.max.apply(null, count);
for (let j = 0; j < 3; j++) {
if (count[j] === maxCount) {
answer.push(j+1);
}
}
return answer;
}
2) 먼저 수포자 1 , 수포자 2, 수포자 3의 찍는 순서를 배열로 작성 후 각 학생들이 정답을 맞히는 수를 배열로 저장하기 위하여 count라는 이름의 배열 작성 후 초기값을 0으로 설정한다.
let a = [1,2,3,4,5]; //수포자1
let b = [2,1,2,3,2,4,2,5]; //수포자2
let c = [3,3,1,1,2,2,4,4,5,5]; //수포자3
let count = [0,0,0] // 정답 맞춘 수 [수포자1:수포자2:수포자3]
3) for 문을 활용해서 답과 수포자 1(a), 수포자 2(b), 수포자 3(c) (이하 a, b, c학생으로 표현)의 값과 답을 비교를 반복하는 함수를 만들고 이때 if문을 활용해서 답과 값이 일치하면 count배열이 1씩 증가시킨다.
반복 범위는 정답인 answers의 길이만큼 설정하고 각배 열의 길이만큼 지속적으로 반복하기 위하여
비교하는 학생의 답은 i% 배열의 길이로 설정한다.
즉, count [0]은 a학생이 맞은 수 count[1]은 b학생이 맞은 수, count[2]는 c 학생이 맞은 수이다.
for (let i =0; i<answers.length; i++) {
if(answers[i] === a[i%5]) {
count[0]++;
}
if(answers[i] === b[i%8]) {
count[1]++;
}
if(answers[i] === c[i%10]) {
count[2]++;
}
}
3) 모든 비교를 마치고 이 중 가장 많은 답을 맞힌 학생을 맞추기 출력하기 위하여 count배열의 최댓값을 구하기 위하여
Max.math.apply(null, 배열)을 사용한다, 그리고 for문을 사용하여 배열 안에 요소들을 순차적으로 비교한다.
그리고 answer 배열에 가장 큰 값의 위치에 1을 더한 후 추가한다. -> answer.push(j+1);
[수포자 1, 수포자 2, 수포자 3]을 나타내는 [1,2,3]으로 표현하기 위해서 이다.
const maxCount = Math.max.apply(null, count);
for (let j = 0; j < 3; j++) {
if (count[j] === maxCount) {
answer.push(j+1);
}
}
return answer;
}
3) 배운 것
Math.max 함수를 이용하여 배열 내의 최댓값을 구하고 이를 이용하는것1. 문제
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.

입출력 예시
출처: programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
2. 코드
1) 전체 코드
function solution(answers) {
var answer = [];
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]
let count = [0,0,0];
for (let i =0; i<answers.length; i++) {
if(answers[i] === a[i%5]) {
count[0]++;
}
if(answers[i] === b[i%8]) {
count[1]++;
}
if(answers[i] === c[i%10]) {
count[2]++;
}
}
const maxCount = Math.max.apply(null, count);
for (let j = 0; j < 3; j++) {
if (count[j] === maxCount) {
answer.push(j+1);
}
}
return answer;
}
2) 먼저 수포자1 , 수포자2, 수포자3의 찍는 순서를 배열로 작성 후 각 학생들이 정답을 맞추는 수를 배열로 저장하기 위하여 count라는 이름의 배열 작성 후 초기값을 0으로 설정 한다.
let a = [1,2,3,4,5]; //수포자1
let b = [2,1,2,3,2,4,2,5]; //수포자2
let c = [3,3,1,1,2,2,4,4,5,5]; //수포자3
let count = [0,0,0] // 정답 맞춘 수 [수포자1:수포자2:수포자3]
3) for 문을 활용해서 답과 수포자1(a), 수포자2(b), 수포자3(c) (이하 a,b,c학생으로 표현)의 값과 답을 비교를 반복하는 함수를 만들고 이때 if문을 활용해서 답과 값이 일치하면 count배열이 1씩 증가시킨다.
반복 범위는 정답인 answers의 길이만큼 설정하고 각배열의 길이만큼 지속적으로 반복하기 위하여
비교하는 학생의 답은 i%배열의길이로 설정한다.
즉, count[0]은 a학생이 맞은수 count[1]은 b학생이 맞은 수, count[2]는 c 학생이 맞은수이다.
for (let i =0; i<answers.length; i++) {
if(answers[i] === a[i%5]) {
count[0]++;
}
if(answers[i] === b[i%8]) {
count[1]++;
}
if(answers[i] === c[i%10]) {
count[2]++;
}
}
3) 모든 비교를 마치고 이 중 가장 많은 답을 맞춘 학생을 맞추기 출력하기 위하여 count배열의 최대값을 구하기 위하여
Max.math.apply(null, 배열)을 사용한다, 그리고 for문을 사용하여 배열안에 요소들을 순차적으로 비교한다.
그리고 answer 배열에 가장 큰 값의 위치에 1을 더한 후 추가한다. -> answer.push(j+1);
[수포자1,수포자2,수포자3]을 나타내는 [1,2,3]으로 표현하기 위해서 이다.
const maxCount = Math.max.apply(null, count);
for (let j = 0; j < 3; j++) {
if (count[j] === maxCount) {
answer.push(j+1);
}
}
return answer;
}
3) 배운 것
Math.max 함수를 이용하여 배열내의 최대값을 구하고 이를 이용하는것
- 기본구조
Math.max([값1[, 값2[, ...]]])
만약, 아무런 값이 주어지지 않는다면 -Infinity로 출력된다.
- Math.max에 관한 자세한내용:
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/max
'프로그래밍 > HTML, CSS, JavaScript' 카테고리의 다른 글
[JavaScript] 프로그래머스_가운데 글자 가져오기(substr() 사용하기) (0) | 2021.04.28 |
---|---|
[HTML,CSS,JavaScript] jQuery 섹션 이동 버튼 만들기, 원하는 태그로 이동 하는법 (0) | 2021.04.24 |
프로그래머스 Level1 두수의 합 구하기(JavaScript) (0) | 2021.03.24 |
HTML, CSS 수평배치와 줄넘김하는 방법, flex와 flax-wrap 사용법 (0) | 2021.03.06 |
스파르타 코딩클럽 웹 종합반 온라인 강의 회고 및 후기! (0) | 2020.10.16 |