티스토리 뷰
반응형
문제
원본 사이트 : programmers.co.kr/learn/courses/30/lessons/42840?language=javascript
문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해주세요.
입출력 예
answers | return |
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
입출력 예 설명
입출력 예 #1
수포자 1은 모든 문제를 맞혔습니다.
수포자 2는 모든 문제를 틀렸습니다.
수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
모든 사람이 2문제씩을 맞췄습니다.
풀이
문제 분석
- 1번 수포자가 찍는 방식: [1, 2, 3, 4, 5]의 반복
- 2번 수포자가 찍는 방식: [2, 1, 2, 3, 2, 4, 2, 5]의 반복
- 3번 수포자가 찍는 방식: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]의 반복
Array.reduce()를 이용해 점수 계산 후 판별 - (+4)
function solution(answers) {
// students: 수포자들의 답안 패턴
const students = [
[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
];
// score: 수포자들의 점수
let score = [];
// 수포자 별 점수 계산
for(let student of students){
score.push(answers.reduce((acc, curr, idx) => {
// 해당 idx의 정답이 수포자의 정답 패턴에 일치할 경우, 점수 증가
curr === student[idx%student.length] ? acc++ : acc;
// 해당 수포자의 점수를 score 배열에 push
return acc;
}, 0));
}
// 가장 많은 문제를 맞힌 사람 return
return score.reduce((acc, curr, idx) => {
// 현재 수포자의 점수가 최대 점수와 같을 경우, idx+1 값을 배열에 push
curr === Math.max(...score) ? acc.push(idx+1) : acc;
return acc;
}, []);
}
결론
Array.reduce()가 javascript의 가장 유용한 메서드라고 해서 reduce를 사용해 풀려고 많이 노력한 문제다.
처음엔 acc때문에 이해하기도 힘들었지만 그래도 이제는 조금 사용할 수 있을 것 같다.
반응형
'알고리즘 > Programmers' 카테고리의 다른 글
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코테
- 하이퍼레저 패브릭
- 코딜리티
- Private Data
- 직딩잇템
- Hyperledger Indy
- Hyperledger Fabric v1.1
- 하이퍼레저 페브릭
- 알고리즘
- 빅데이터 기초
- 빅데이터 교육
- 암브로셔스
- 문제풀이
- ambrosus
- 기초 of 기초 데이터 개념
- 코딩테스트
- 어서와 데이터는 처음이지
- Hyperledger Fabric
- 블록체인
- docker
- javascript
- Hyperledger Fabric v1.2
- 블록 체인
- Blockchain
- 빅데이터
- ubuntu
- codility
- 빅데이터 강의
- 하이퍼레저 인디
- DOCs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함