반응형
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해주세요.
입출력 예
answer | return |
[1,2,3,4,5] | [1] |
[1,3,2,4,2] | [1,2,3] |
입출력 예 설명
입출력 예 #1
- 수포자 1은 모든 문제를 맞혔습니다.
- 수포자 2는 모든 문제를 틀렸습니다.
- 수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
- 모든 사람이 2문제씩을 맞췄습니다.
풀이 1(Java)
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
// 1. 학생별 문제 찍는 패턴 배열
int[] a ={1, 2, 3, 4, 5};
int[] b ={2, 1, 2, 3, 2, 4, 2, 5};
int[] c ={3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
// 2. 맞힌 문제 수 score 배열에 담기
int[] score = new int[3];
for(int i = 0;i<answers.length;i++){
if(answers[i]==a[i%5]) score[0]++;
if(answers[i]==b[i%8]) score[1]++;
if(answers[i]==c[i%10]) score[2]++;
}
// 3. 가장 많은 문제를 맞힌 사람
int max = Math.max(score[0], Math.max(score[1], score[2]));
ArrayList<Integer> list =new ArrayList<>();
if(max == score[0]) {list.add(1);}
if(max == score[1]) {list.add(2);}
if(max == score[2]) {list.add(3);}
return list.stream().mapToInt(i->i.intValue()).toArray();
}
}
풀이 2(JavaScript)
function solution(answers) {
let result = [];
// 1. 세 학생이 찍는 패턴
let student_1 = [1, 2, 3, 4, 5];
let student_2 = [2, 1, 2, 3, 2, 4, 2, 5];
let student_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
// 2. 세 학생이 맞힌 문제 수
let count_student_1 = answers.filter(
(answer, i) => answer === student_1[i % student_1.length]
).length;
let count_student_2 = answers.filter(
(answer, i) => answer === student_2[i % student_2.length]
).length;
let count_student_3 = answers.filter(
(answer, i) => answer === student_3[i % student_3.length]
).length;
// 3. 문제를 가장 많이 맞힌 학생 배열을 반환하기
let max = Math.max(count_student_1, count_student_2, count_student_3);
if (max === count_student_1) {
result.push(1);
}
if (max == count_student_2) {
result.push(2);
}
if (max == count_student_3) {
result.push(3);
}
return result;
}
// test
solution([1, 2, 3, 4, 5]); // return [1]
solution([1, 3, 2, 4, 2]); // return [1,2,3]
풀이 3(Python3)
def solution(answers):
answer = []
# 1. 세 학생이 찍는 패턴 배열
first = [1, 2, 3, 4, 5]
second = [2, 1, 2, 3, 2, 4, 2, 5]
third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
first_count = 0
second_count = 0
third_count = 0
# 2. 세 학생이 맞힌 문제 수
for i in range(0, len(answers)):
if answers[i] == first[i%5]:
first_count = first_count + 1
if answers[i] == second[i%8]:
second_count = second_count + 1
if answers[i] == third[i%10]:
third_count = third_count + 1
# 3. 문제를 가장 많이 맞힌 학생 배열을 반환하기
max_count = max(first_count, second_count, third_count)
if max_count == first_count:
answer.append(1)
if max_count == second_count:
answer.append(2)
if max_count == third_count:
answer.append(3)
print(answer)
return answer
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Level 1] 가운데 글자 가져오기(JavaScript) (0) | 2020.03.25 |
---|---|
[Level 1] 2016년(JavaScript) (0) | 2020.03.25 |
[Level 1][탐욕법(Greedy)] 체육복(JavaScript) (0) | 2020.03.25 |
[Level 1][정렬] k번째수(Java, JavaScript, Python3) (0) | 2020.03.25 |
[Level 1][해시] 완주하지 못한 선수(Java, JavaScript) (0) | 2019.12.02 |
댓글