728x90
[Swift] 프로그래머스 - 모의고사(lv. 1)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42840
2. 접근
다들 찍는 패턴이 다르기 때문에 하나의 패턴을 상수로 지정해주었다.
그런 다음 answer과 그 상수들을 비교하여 점수를 리턴해주고, 배열을 정렬해서 차례로 뽑아주면 되겠다는 생각을 했다.
calculateScore 함수는 answers와 student를 인자로 받는다. answer는 전체 원소를 순회하고, student는 마지막 인덱스에 이르면 다시 처음으로 돌아가서 순회한다. 이를 위해 j를 변수로 하나 더 두어서 만약 j가 student 내에서 마지막 인덱스라면 j를 0으로 만들어주는 로직을 추가하였다.
그런다음 array는 2열을 기준으로 정렬하였다. 현재 array는 정렬된 상태이기 때문에 answer에 들어갈 학생이 1명인지 2명인지 3명인지만 알아내면 된다. 만약 셋 다 같은 원소를 1열에 가지고 있다면, 모든 학생을 출력해주면 되고, 한 명이 제일 많이 맞춘 상황이라면 0행 0열에 있는 학생의 번호를 출력해주면 된다.
3. 코드
import Foundation
func solution(_ answers:[Int]) -> [Int] {
let aStudentAnswer = [1, 2, 3, 4, 5]
let bStudentAnswer = [2, 1, 2, 3, 2, 4, 2, 5]
let cStudentAnswer = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
let array = [[1, calculateScore(answers, aStudentAnswer)], [2, calculateScore(answers, bStudentAnswer)], [3, calculateScore(answers, cStudentAnswer)]].sorted(by: { $0[1] > $1[1] })
var answer = [Int]()
if array[0][1] == array[1][1] {
if array[1][1] == array[2][1] {
for i in array {
answer.append(i[0])
}
return answer
} else {
return [array[0][0], array[1][0]]
}
} else {
return [array[0][0]]
}
}
func calculateScore(_ answer: [Int], _ student: [Int]) -> Int{
var sum = 0
var j = 0
for i in 0 ... answer.count - 1 {
if answer[i] == student[j] {
sum += 1
}
j += 1
if j == student.count {
j = 0
}
}
return sum
}
728x90
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 체육복(lv. 1) (0) | 2023.02.08 |
---|---|
[Swift] 프로그래머스 로또의 최고 순위와 최저 순위(lv. 1) (0) | 2023.02.06 |
[Swift] 프로그래머스 가장 가까운 같은 글자(lv. 1) (0) | 2023.02.03 |
[Swift] 프로그래머스 [1차] 다트 게임(lv. 1) (0) | 2023.02.02 |
[Swift] 프로그래머스 푸드 파이트 대회(lv. 1) (0) | 2023.02.01 |
댓글