728x90
반응형
programmers.co.kr/learn/courses/30/lessons/17682?language=swift
다트를 총 3번 던져서 얻는 총 점수를 계산하는 문제,
단 한 판에 "점수 | 보너스 | 옵션"이 존재할 수 있다. 모두 문자열로 오는 정보이기에 알맞게 split하는게 우선일 것 이다.
1. 판 별로 문자열 나누기
2. 판 별 점수 계산
3. 총합내기
바로 코드로!
func solution(_ dartResult:String) -> Int {
var totalScore = [Int]()
var curScore = Array(repeating: "", count: 3)
var idx = 0
let options = ["*","#"]
// 1. 판별로 나누기
for score in dartResult {
let value = String(score)
if score.isNumber {
curScore[idx] += value
} else {
if options.contains(value) {
if idx != 0 {
curScore[idx-1] += value
} else {
curScore[0] += value
}
} else {
curScore[idx] += value
idx += 1
}
}
}
// 2. 판별 점수 계산
for i in 0..<curScore.count {
var num = ""
for v in curScore[i] {
if v.isNumber {
num += String(v)
} else {
switch v {
case "S":
totalScore.append(Int(num)!)
case "D":
totalScore.append(pow(Int(num)!,2))
case "T":
totalScore.append(pow(Int(num)!,3))
case "*":
totalScore[i] *= 2
if i > 0 {
totalScore[i-1] *= 2
}
case "#":
totalScore[i] *= -1
default:
break
}
}
}
}
// 3. 총합내기
return totalScore.reduce(0,+)
}
func pow(_ a: Int,_ b: Int ) -> Int {
var res = 1
for _ in 0..<b {
res *= a
}
return res
}
[ 프로세스 ]
1. 판 별로 문자열 나누기
2. 판 별 점수 계산
3. 총합내기
그리 어려운 문제는 아니기에 간략하게 보고 넘어가본다!
문자열을 자르고, 케이스에 맞는지 보고, 타입에 유의하면서 풀이하면 문제 없이 풀 수 있을 것 같다.
728x90
반응형