[LV.1] 모의고사

Heedon Ham·2024년 5월 31일
0
post-thumbnail

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다.
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 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, ...
  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력 예

answersreturn
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]

반복되는 패턴 == index 기준값으로 나누기, 나머지 활용

여럿일 경우, 오름차순으로 정렬하라고 요구하지만 따로 sorted가 필요하지는 않다.
처음 결과값 세팅을 1번부터 n번 사람까지 미리 순서를 설정해두고 계산을 했기에, enumerated에서 filter로 걸러진 남은 element의 offset만 구하면 된다.

import Foundation

func solution(_ answers:[Int]) -> [Int] {
    
    let first = [1, 2, 3, 4, 5]
    let second = [2, 1, 2, 3, 2, 4, 2, 5]
    let third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    var result = [0, 0, 0]
    
    for i in 0..<answers.count {
        if answers[i] == first[i%5] {	//답안 5개 패턴
            result[0] += 1
        }
        if answers[i] == second[i%8] {	//답안 8개 패턴
            result[1] += 1
        }
        if answers[i] == third[i%10] {	//답안 10개 패턴
            result[2] += 1
        }
    }
       
    let max = result.max()		//가장 큰 값 찾기
    
    //가장 큰 값과 동일한 값의 Index만 남기기
    return result.enumerated().filter { $0.element == max }.map { $0.offset + 1 }
}
profile
dev( iOS, React)

0개의 댓글