HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤎
프론트엔드 데브코스 5기 교육생
/
🙆
박병현팀
/
💯
모의고사
💯

모의고사

레벨
LV.1
날짜
Oct 30, 2023
링크
https://school.programmers.co.kr/learn/courses/30/lessons/42840

🔎 문제


school.programmers.co.kr
https://school.programmers.co.kr/learn/courses/30/lessons/42840
 

🧩 구현과정 및 코드

개인 토글 영역에 구현 과정과 코드를 자유롭게 작성해주시면 됩니다.

사용할 데이터 구조와 풀이 방향성
사용할 데이터 구조와 풀이 방향성
적용할 알고리즘 혹은 메서드
적용할 알고리즘 혹은 메서드

수영


구현

  • 완전 탐색(forEach 함수 사용)
  • counts: 각 students의 정답 개수를 담은 배열

코드

function solution(answers) { const answer = [] const counts = Array(3).fill(0); 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]] // 완전 탐색 answers.forEach((question, number) => { students.forEach((student, index) => { if (question === student[number % student.length]) { // 정답이면 개수 체크 counts[index]++; } }) }) const max = Math.max(...counts) // max값이 0이면 빈 배열 반환 if (max === 0) return answer // 최고 점수인 사람의 (index + 1)을 answer.push counts.forEach((count, index) => count === max ? answer.push(index + 1) : null) // 오름차순 정렬 return answer.sort(); }

정은


구현

  1. 수포자들의 정답 패턴을 배열에 등록
  1. 한문제씩 세사람의 답과 비교, 맞으면 해당하는 수포자 idx에 점수+1
  1. 배열의 최대값을 가진 인덱스+1 출력

코드

def solution(answers): result = [0,0,0] supo_answers = [[1,2,3,4,5],[2, 1, 2, 3, 2, 4, 2, 5],[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]] for idx, answer in enumerate(answers): for supo_idx, supo_arr in enumerate(supo_answers): result[supo_idx] += (answer == supo_arr[idx%len(supo_arr)]) best = [] max_result = max(result) for i in range(len(result)): if max_result == result[i]: best.append(i+1) return best

종혁


구현

  • answers 라는 문제 정답 배열과 각 학생의 배열을 비교해보면서 - 각 학생들이 몇개씩 맞췄는지 비교
  • 학생들의 문제풀이에 반복되는 패턴이 존재 - 몇번째 문제에 어떤 답을 선택했는지 알 수 있음

코드

function solution(answers) { //문제 - 10000개 //1번은 5번마다 패턴 반복 - 문제번호 % 5 //2번 8 //3번 10 let result = [[1,0],[2,0],[3,0]] const stu1 = [1,2,3,4,5] const stu2 = [2,1,2,3,2,4,2,5] const stu3 = [3,3,1,1,2,2,4,4,5,5] for(let i=0;i<answers.length;i++){ const answer = answers[i] if(stu1[i % 5] === answer){ result[0][1] ++ } if(stu2[i % 8] === answer){ result[1][1] ++ } if(stu3[i % 10] === answer){ result[2][1] ++ } } const max = Math.max(...result.map(el => el[1])) result.sort((a,b) => { if(a[1] === b[1]){ return a[0] - b[0]//맞춘갯수가 같은경우 학생번호 기준으로 }else{ return b[1] - a[1]//맞춘갯수 기준으로 내림차순 } }) //맞춘 값은 내림차순 - 같을 경우 학생 번호 오름차순 //[ [ 1, 5 ], [ 2, 0 ], [ 3, 0 ] ] const b = result.filter(el => el[1] >= max).map(el => el[0])//동점자 있을경우 return b }

재웅


구현

  1. 학생별 패턴을 저장하여 채점
  1. 계산된 점수를 중복 고려하여 계산

코드

function solution(answers) { const answer = []; let [student1,student2,student3] = [0,0,0] const answer1 = [1,2,3,4,5] const answer2 = [2,1,2,3,2,4,2,5] const answer3 = [3,3,1,1,2,2,4,4,5,5] for(let i=0;i<answers.length;i++){ if(answers[i] === answer1[i%answer1.length]){student1+=1} if(answers[i] === answer2[i%answer2.length]){student2+=1} if(answers[i] === answer3[i%answer3.length]){student3+=1} } const scores = [student1,student2,student3] scores.forEach((element,i)=>{ if(element === Math.max(...scores)){ answer.push(i+1) } }) return answer; }
 

✏️ 후기

문제를 풀고 느낀 점, 막혔던 부분 혹은 개선 사항 등을 자유롭게 작성해주시면 됩니다.

👧🏻
수영
  • 1단계에 비해 시간이 비교적 오래 걸렸다
  • 고민 됐던 점: 수포자 3명 각각 찍으려는 번호의 개수가 다른 점 → 나눗셈 연산 student[number % student.length]
👧🏻
정은
  • 변수명에서 살짝 어지러웠습니다
👦🏻
종혁
  • 제일 많이 맞춘 사람을 찾는 과정은 어렵지 않았는데, 정답을 리턴하는 과정에서 코드가 좀 복잡해진 것 같다
👦🏻
재웅