programmers.co.kr/learn/courses/30/lessons/17682?language=swift
코딩테스트 연습 - [1차] 다트 게임
programmers.co.kr
다트게임 점수구하기!
기본적으로 점수는 3개로 구성 -> 숫자는 세개
3가지 영역 S, D, T -> 각 1제곱, 2제곱, 3제곱
보너스 상 *, # -> *는 이전 점수, 지금 점수 * 2, #는 지금 점수 * -1
일단 배열에 각 점수별로 계산을 해두고 마지막에 reduce로 합치기로 생각하고
반복문을 하나 돌려서 점수를 하나씩 배열에 담고 문자열을 만나면 담긴 점수를 가지고 계산
if 문에서 else 로 바로바로 점수를 배열에 담았더니 10과 같은 숫자는 ["1", "0"] 이렇게 담기길래 number라는 변수를 하나 줘서 문자열을 만나기까지 합쳐두었다가 배열에 담아줌
그리고 각 문자를 만나면 그냥 단순히 계산만 해주면 해결
추가적인 조건은 *이 처음에 나오면 첫 점수만 *2, *이 중복되면 *4, # * 이 중복되면 * -2
func solution(_ dartResult:String) -> Int {
let dartList = dartResult.map { $0 }
var calc = [Int]()
var number = ""
for dart in dartList {
if Int(String(dart)) == nil {
if let n = Int(number) {
calc.append(n)
number = ""
}
switch String(dart) {
case "S":
// calc[calc.count - 1] = Int(pow(Double(calc.last!), 1))
calc[calc.count - 1] = calc.last!
case "D":
// calc[calc.count - 1] = Int(pow(Double(calc.last!), 2))
calc[calc.count - 1] = calc.last! * calc.last!
case "T":
// calc[calc.count - 1] = Int(pow(Double(calc.last!), 3))
calc[calc.count - 1] = calc.last! * calc.last! * calc.last!
case "*":
if calc.count > 1 {
calc[calc.count - 2] = calc[calc.count - 2] * 2
}
calc[calc.count - 1] = calc.last! * 2
case "#":
calc[calc.count - 1] = calc.last! * -1
default:
break
}
} else {
number.append(dart)
}
}
return calc.reduce(0, +)
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 순위검색 (0) | 2021.05.03 |
---|---|
프로그래머스 - 메뉴리뉴얼 (0) | 2021.02.23 |
프로그래머스 - 실패율 (0) | 2021.02.08 |
프로그래머스 - [1차] 비밀지도 (0) | 2021.01.24 |
프로그래머스 - 튜플 (0) | 2021.01.22 |