안녕하세요! 오늘은 프로그래머스 다트게임 문제를 풀어보았습니다!
다트 게임문제는 구현 문제였습니다!
이 문제도 푸는데 시간이 살짝 걸리는데요!
한글자씩 해석하면서 결과물을 만들어내고 결과를 합치면 문제가 해결됩니다!
같이 한번 풀어보시죠!
1. 다트 게임
우선 한글자씩 해석하기 위해 그리고 이전의 글자 상태에 따라 처리를 다르게 하기 위해 characterStatus enum을 정의합니다.
String에서 한글자씩 가져오기 위해
let char: String = String(dartResult[dartResult.index(dartResult.startIndex, offsetBy: i)])
이런 방식을 사용합니다.
그리고 String이 Int로 형변환 가능한지 여부를 판단하여 숫자인지 글자인지 확인합니다.
if Int(char) != nil {
}
else{
}
숫자라면 nil이 아니고 글자라면 nil이기 때문에 이렇게 나눌 수 있습니다.
나머지 구현은 Num 배열과 NumPrize배열을 통해 Num에는 점수를 넣고 NumPrize는 -4, -2, -1, 1, 2, 4 를 문제에 맞게 입력하여 마지막에 Num과 NumPrize의 곱의 합을 return하면 정답이 됩니다!
enum characterStatus {
case none
case char
case number
case specialChar
}
func solution(_ dartResult:String) -> Int {
var count = dartResult.count
var beforeStatus = characterStatus.none
var Num: [Int] = [Int]()
var nextNum = 0
var NumPrize: [Int] = [Int]()
for i in 0 ..< count {
let char: String = String(dartResult[dartResult.index(dartResult.startIndex, offsetBy: i)])
if Int(char) != nil {
if beforeStatus == characterStatus.number {
nextNum = nextNum*10 + Int(char)!
}
else {
nextNum = Int(char)!
}
beforeStatus = characterStatus.number
}
else if char == "S" || char == "D" || char == "T" {
if char == "D"{
nextNum = nextNum * nextNum
}
else if char == "T"{
nextNum = nextNum * nextNum * nextNum
}
Num.append(nextNum)
NumPrize.append(1)
beforeStatus = characterStatus.char
}
else if char == "*" || char == "#"{
let numCount = NumPrize.count
if char == "*" {
if numCount > 1 {
NumPrize[numCount-1] *= 2
NumPrize[numCount-2] *= 2
}
else {
NumPrize[numCount-1] *= 2
}
}
else if char == "#" {
NumPrize[numCount-1] = -1
}
beforeStatus = characterStatus.specialChar
}
}
let numCount = Num.count
var result = 0
for i in 0..<numCount {
result += Num[i] * NumPrize[i]
}
return result
}
여기까지 긴글 봐주셔서 감사합니다!
오늘도 좋은 하루 되세요!
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 문자열 내 p와 y의 개수, 문자열 내림차순으로 배치하기, 문자열 다루기 기본 with Swift (0) | 2021.12.06 |
---|---|
[프로그래머스] 나누어 떨어지는 숫자 배열, 두 정수 사이의 합, 문자열 내 마음대로 정렬하기 with Swift (0) | 2021.12.06 |
[프로그래머스] [1차] 비밀지도, 가운데 글자 가져오기 with Swift (0) | 2021.12.04 |
[프로그래머스] 최소직사각형, 나머지가 1이 되는 수 찾기, 부족한 금액 계산하기 with Swift (0) | 2021.12.03 |
[프로그래머스] 예산, 두 개 뽑아서 더하기, 2016년 (0) | 2021.12.02 |