🥹
// 콜백 함수에 배열의 각 요소, 인덱스, filter를 실행한 전체 배열을 넘겨줍니다.
function cb(ele, idx, arr) {
return ele * 2;
}
const arr = [1, 2, 3, 4, 5];
const result = arr.map(cb);
console.log(result); // [2, 4, 6, 8, 10]
const arr = [1,2,3]
arr.map((item, index, arr) => {
console.log(`요소값: ${item}`, 인덱스: ${index}, this: ${JSON,stringify(arr)})
return item
})
/*
요소값 1, 인덱스 0, this:[1,2,3]
요소값 2, 인덱스 1, this:[1,2,3]
요소값 3, 인덱스 2, this:[1,2,3]
*/
// 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
const answerTable = [
// 1번 수포자가 찍는 방식
[1,2,3,4,5], // 5
// 2번 수포자가 찍는 방식
[2,1,2,3,2,4,2,5], // 8
// 3번 수포자가 찍는 방식
[3,3,1,1,2,2,4,4,5,5] // 10
]
function solution(answers){
// 각각의 학생들의 점수를 저장하는 배열
const answer = [0,0,0]
for(let i = 0; i < answers.length ; i++){
for (let j = 0 ; j <answerTable.length ; j++){
// answers[i] : 정답의 데이터
// answer[j] : 각각의 수포자가 찍은 배열 데이터를 가져옴
// i % answerTable[j].length 뭐...?
if ( answerTable[ j ][ i % answerTable[j].length ] === answer[i] ){
answer[j]++
}
}
}
// 가장 많이 맞춘 점수
const biggest = Math.max(...answer)
// 최고점수를 가진 학생을 answer 배열에서 찾아서 result에 넣기
const result = []
for ( let i = 0 ; i < answer.length ; i++ ){
if( answer[i] === biggest ){
result.push( i + 1 )
}
}
return result
}
// map() 사용한 풀이
function solution(answers){
const scoreList = answerTable.map( (el,j) =>{
const score = answers.reduce ((acc, cur, i) => {
return acc + (
el[i % el.length] === cur ? 1 : 0
)
}, 0)
return {student : j + 1 , score: score}
})
const biggest = Math.max(...scoreList.map( el => {
return el.score
}))
return scoreList.filter(el => {
return el.score ===biggest
}).map( el => el.student )
}
양수 나열은 되는데 음수 나열이 안되고 있어서 보니까 for문에 있는 조건문 통과를 못해서 그런거였다🥹 받아온 수를 절대값으로 만들어주는 Math.abs() 메소드를 이용해서 음수를 양수로 바꾸고 if 문으로 양수일 경우와 음수일 경우를 나눠서 부호를 달리 붙여줬음!!
// 임의의 수(num)를 입력받아, 0부터 해당 num까지의 인덱스를 적은 문자열을 반환하는 함수를 완성하세요
// idxString(3) => '0123'
// idxString(0) => '0'
// idxString(9) => '0123456789'
// idxString(-2) => '0-1-2'
function idxString(num) {
let result = ""
for ( let i = 0; i <= Math.abs(num) ; i++ ){
if (num < 0)
{
result += -i.toString()
}
else result += i.toString()
}
return result
}
Math.floor()함수를 사용해서 소수점 이하를 버린 만큼의 수를 반환하고 그 다음에 1부터 나온 수를 곱했음! 보통 for문의 기준이 되는 i 값을 0으로 두는데 여기선 그러면 계속 0만 반환하기 때문에 1로 둬야한다!