https://programmers.co.kr/learn/courses/30/lessons/42840
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
import java.util.Collections.max
class Solution {
fun solution(answers: IntArray): IntArray {
var answer = intArrayOf()
var result_List: MutableList<Int> = mutableListOf()
var cal_List: MutableList<Int> = mutableListOf()
var a1: IntArray = intArrayOf(1,2,3,4,5)
var a2: IntArray = intArrayOf(2,1,2,3,2,4,2,5)
var a3: IntArray = intArrayOf(3,3,1,1,2,2,4,4,5,5)
var s1: Int = cal_Count(a1, answers)
var s2: Int = cal_Count(a2, answers)
var s3: Int = cal_Count(a3, answers)
result_List.add(s1)
result_List.add(s2)
result_List.add(s3)
for(i in 0..result_List.size-1){
if(max(result_List) == result_List[i]){
cal_List.add(i+1)
}
}
answer = cal_List.toIntArray()
return answer
}
fun cal_Count(score_Array: IntArray, data_Array: IntArray): Int{
var count: Int = 0
if(score_Array.size < data_Array.size){
for(i in 0..data_Array.size-1){
var j: Int = i%score_Array.size
if(score_Array[j] == data_Array[i]){
count++
}
}
}
else{
for(i in 0..data_Array.size-1){
if(score_Array[i] == data_Array[i]){
count++
}
}
}
return count
}
}
핵심은 이 부분이다.
시험문제의 정답이(data_Array)가 찍는 학생의 주기(score_Array)보다 많았을 때이다.
예를들어 data_Array.size가 10, score_Array.size가 5라면 score_Array[5]가 되는순간에 IndexOutOfBoundsException오류가 발생한다.
따라서 score_Array[5]가 score_Array[0]값이 될 수 있도록 배열을 순환 시켜줄 필요가 있다.
그래서 var j: Int = i%score_Array.size를 넣어줘서 score_Array가 계속 순환할 수 있도록 조치했다.
위의 코드는 수포자 3명에게만 해당되는 코드라 범용성이 모자른것이 사실이다.. 시간이 없어 알고리즘 중점만 했다.
다음시간에는 범용성있게 조정하는 시간을 가져보겠다.