문제
내 정답 코드
import Foundation
// 하나의 유형에 대한 객체로 유형 value와 score를 가지고 있다.
struct Category {
let category: String
var score: Int = 0
mutating func plusScore(num: Int) {
self.score += num
}
}
// 하나의 지표에 대한 객체로 2개의 유형과 choice에 대한 점수를 가지고 있다.
struct Chracteristic {
let scores:[Int:Int] = [1:3, 2:2, 3:1, 5:1, 6:2, 7:3]
var categories: [Category]
// survey와 choice에 따라 유형의 score를 추가한다.
mutating func cal(survey: String, choice: Int) {
// choice가 4보다 작으면 survey의 첫번째 문자와 일치하는 유형에 점수를 더한다.
if choice < 4 {
for i in 0..<categories.count {
if categories[i].category == String(survey.first!) {
categories[i].plusScore(num: scores[choice]!)
}
}
// choice가 4보다 크면 survey의 마지막 문자와 일치하는 유형에 점수를 더한다.
} else if choice > 4 {
for i in 0..<categories.count {
if categories[i].category == String(survey.last!) {
categories[i].plusScore(num: scores[choice]!)
}
}
}
}
// score가 더 높은 유형을 반환한다.
func winCategory() -> Category {
return categories[0].score >= categories[1].score ? categories[0] : categories[1]
}
}
func solution(_ survey:[String], _ choices:[Int]) -> String {
var result = "" // 최종 반환 문자열
// 모든 유형의 지표를 담는다.
var chracter: [Chracteristic] = [
Chracteristic(categories: [Category(category: "R"), Category(category: "T")]),
Chracteristic(categories: [Category(category: "C"), Category(category: "F")]),
Chracteristic(categories: [Category(category: "J"), Category(category: "M")]),
Chracteristic(categories: [Category(category: "A"), Category(category: "N")])
]
// survey가 가르키는 지표에 따라 cal함수를 호출하여 score를 계산한다.
for i in 0..<survey.count {
if survey[i].contains("R") {
chracter[0].cal(survey: survey[i], choice: choices[i])
} else if survey[i].contains("C") {
chracter[1].cal(survey: survey[i], choice: choices[i])
} else if survey[i].contains("J") {
chracter[2].cal(survey: survey[i], choice: choices[i])
} else {
chracter[3].cal(survey: survey[i], choice: choices[i])
}
}
// winCategory() 함수를 이용하여 result를 계산한다.
chracter.map {
result.append($0.winCategory().category)
}
return result
}
#
1. 코드가 길어 주석으로 설명 대체함
배운 기술
'프로그래머스 (Swift) > lv 1' 카테고리의 다른 글
[lv1] 행렬의 덧셈 (0) | 2024.09.10 |
---|---|
[lv1] 짝수와 홀수 (0) | 2024.09.05 |
[lv1] 로또의 최고 순위와 최저 순위 (0) | 2024.09.02 |
[lv1] 평균 구하기 (0) | 2024.09.02 |
[lv1] 숫자 짝꿍 (0) | 2024.08.30 |