programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
이 글을 쓰면서 전체 라인수를 좀 줄여보고자 변경했는데도 라인수가 좀 크다.
저 사이트는 다른이의 답도 볼 수 있는 서비스를 제공하는데 보고 오니 정말 내 소스가 좀 부끄러워진다.
이번 문제는 배열의 탐색을 묻는 문제인가 싶다.
세명의 사람이 있고
첫번째 사람은 1,2,3,4,5 ... 1,2,3,4,5 순으로 답을 적고
이런식으로 세명의 정답 적는 배열이 주어진다.
세명의 점수를 정답 배열에서 계속 비교해야해서
해당 내용을 난 TestPaper라는 구조체를 만들어 정리했다.
그 후 각각의 총점을 계산하고
각각의 점수를 기준으로 정렬하고 가장 앞에 있는 사람을 뽑는것으로 톱을 정하고
혹시 톱과 같은 점수가 있는지 filter함수를 통해 사람을 추가로 뽑았다.
struct TestPaper {
let id:Int
private let loopAnsers:[Int]
private var loopIndex:Int = 0
var score = 0
var answer: Int {
mutating get {
let index = loopIndex
self.loopIndex += 1
if loopIndex >= loopAnsers.count { self.loopIndex = 0 }
return self.loopAnsers[index]
}
}
init(id:Int,loopAnsers:[Int]) {
self.id = id
self.loopAnsers = loopAnsers
}
}
func solution(_ answers:[Int]) -> [Int] {
var people:[TestPaper] = [
TestPaper(id: 1, loopAnsers: [1,2,3,4,5]),
TestPaper(id: 2, loopAnsers: [2,1,2,3,2,4,2,5]),
TestPaper(id: 3, loopAnsers: [3,3,1,1,2,2,4,4,5,5])
]
// calc score
for answer in answers {
for index in 0 ..< people.count {
if answer == people[index].answer {
people[index].score += 1
}
}
}
// get top
let top = people.sorted(by: {$0.score > $1.score}).first!
// get result
var result = [Int]()
for person in people.filter({ $0.score == top.score}) {
result.append(person.id)
}
return result
}
중간에 그냥 주석으로 때워도 될부분이 생각나지 않아 이번편은 모든 부분을 소스로 올렸다.
아래 링크로 가면 전체 클래스를 볼 수 있다
github.com/wiwi-git/Programmers-learn/blob/master/swift/Practice/Practice/MockTest.swift
wiwi-git/Programmers-learn
Contribute to wiwi-git/Programmers-learn development by creating an account on GitHub.
github.com
'iOS > swift' 카테고리의 다른 글
프로그래머스 - 프린터 (0) | 2021.05.06 |
---|---|
프로그래머스 - 기능개발 (0) | 2021.05.05 |
프로그래머스 - 다리를 지나는 트럭 (0) | 2021.05.03 |
프로그래머스 - 크레인 인형뽑기 게임 (0) | 2021.04.28 |
Frameworks/SnapKit.framework/Info.plist: No such file or directory (0) | 2021.03.12 |