[Programmers 42840] 모의고사
문제
LV1 [Programmers 42840 - 모의고사]
문제 풀이 방법
수업시간에 풀이했던 문제여서 빠르게 풀 수 있었다. 파이썬으로 풀 때는 한 번에 쭉 풀었는데, 자바는 꽤 시간이 걸렸다..
- 각 학생의 찍는 방법을 배열로 선언한다.
- 각 학생의 맞은 문제 개수를 저장할 cnt 배열을 학생 수 만큼 선언한다.
- 매개변수로 주어진 answer 을 순회하면서 각 학생들의 답이 맞는지를 확인하여 cnt배열에 저장한다.
이 때, 학생 배열은 반복되기 때문에 인덱스를 학생 수 만큼 나누어(나머지 연산을 사용)하여 비교한다. - cnt 배열에서 가장 큰 값을 구한다.
- 가장 큰 값을 가지고 있는 학생의 번호를 answer 배열에 담아 반환한다.
풀이 코드
Python
def solution(answers):
answer = []
stu1=[1,2,3,4,5]
stu2=[2,1,2,3,2,4,2,5]
stu3=[3,3,1,1,2,2,4,4,5,5]
cnt=[0]*3
for i in range(len(answers)):
if answers[i]==stu1[i%len(stu1)]:
cnt[0]+=1
if answers[i]==stu2[i%len(stu2)]:
cnt[1]+=1
if answers[i]==stu3[i%len(stu3)]:
cnt[2]+=1
max_cnt=max(cnt)
for i in range(len(cnt)):
if cnt[i]==max_cnt:
answer.append(i+1)
return answer
Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int[] solution(int[] answers) {
int[] answer = {};
int[] stu1 = {1,2,3,4,5};
int[] stu2 = {2,1,2,3,2,4,2,5};
int[] stu3 = {3,3,1,1,2,2,4,4,5,5};
int[] cnt = {0,0,0};
for (int i = 0; i < answers.length; i++) {
if (answers[i] == stu1[i % stu1.length]) {
cnt[0] += 1;
}
if (answers[i] == stu2[i % stu2.length]) {
cnt[1] += 1;
}
if (answers[i] == stu3[i % stu3.length]) {
cnt[2] += 1;
}
}
int max_cnt = (cnt[0]> cnt[1]) ? cnt[0] : cnt[1];
max_cnt = (max_cnt> cnt[2]) ? max_cnt : cnt[2];
List<Integer> arr = new ArrayList<>();
for (int i = 0; i <3; i++) {
if (cnt[i] == max_cnt)
arr.add(i+1);
}
answer = new int[arr.size()];
for (int i = 0 ; i < arr.size() ; i++)
answer[i] = arr.get(i).intValue();
return answer;
}
}
댓글남기기