반응형
아직 스위프트로 알고리즘은 익숙하지 않아서인지.. 문제를 푸는데 헤맵니다..
import Foundation
func solution(_ dartResult:String) -> Int {
let bonus: [Character:Int] = ["S":1, "D":2, "T":3] // 제곱 보너스
var result: Int = 0
var number: String = "" // 10도 고려해야 함으로(사실 두자리는 10 밖에 없어서 다른 방법도 괜찮을듯 합니다.)
var data: [Int] = [0,0,0] // 다트 3개 점수 배열
var index: Int = -1 // 3번의 값 저장
for dart in dartResult{
if dart == "*" { // *
if index >= 1 {
data[index-1] *= 2
}
data[index] *= 2
number = ""
} else if dart == "#" { // #
data[index] = -data[index]
number = ""
} else if dart == "S" || dart == "D" || dart == "T" { // 보너스
data[index] = Int(pow(Double(number)!, Double(bonus[dart]!)))
number = ""
} else { // 숫자가 입력되었을 때
if number.isEmpty && index < 2 {
index += 1
}
number += String(dart)
}
}
result = data.reduce(0, +) //Sum
return result
}
방식은 간단합니다.
무조건 세번 던지는 것으로 정해져 있음으로 배열을 만들고 각 명령어에 대한 점수를 계산했습니다.
그리고 점수를 입력받을땐 0~10 임으로 1과 0이 따로 들어와 이 부분을 고려해 주어야 합니다.
제곱은 pow 함수를 사용했는데 계속 obtional이 조금 헷갈립니다..
반응형
'개발 > PS' 카테고리의 다른 글
[Swift] 프로그래머스 1단계 모음 (0) | 2022.06.06 |
---|---|
[Swift] 프로그래머스 Lv2 주차 요금 계산 (0) | 2022.04.02 |
[Swift] 프로그래머스 Lv2 순위검색 (0) | 2022.03.28 |
[Swift] 프로그래머스 LV1 비밀지도 (0) | 2022.03.12 |
[Swift] 프로그래머스 Lv1 모의고사 (0) | 2022.02.19 |