728x90
[Swift] 프로그래머스 [1차] 다트 게임(lv. 1)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/17682
2. 접근
문제를 잘 이해하는 것이 중요했다. 1 ~ 9 사이의 순서에 따라 주어진 것을 정확하게 구현해내면 어려움 없이 구현할 수 있는 전형적인 구현 문제였다.
dartResult를 한 Character로 끊어서 읽고, 숫자 또는 문자라면 그 안에서 적절하게 분기를 해주고, 만약 그 둘이 아니라면 * or # 이므로 그에 따라 이전 회차의 점수를 두 배 시켜주거나 하나만 두 배를 시켰다.
tempNumber 변수를 -1로 초기화하여, 한 자리 숫자와 10을 구분하여 처리하였다. tempNumber에 숫자가 이미 들어가있는데, 또 그 분기문으로 들어온 경우, 숫자가 연속으로 자리한 것, 즉 10이 들어온 것이기 때문에 12~13번 라인을 아래와 같이 구성하였다.
3. 코드
import Foundation
func solution(_ dartResult:String) -> Int {
let dartResult = Array(dartResult)
var answer = [Int]()
var tempNumber = -1
var j = 0
for i in dartResult {
if i.isNumber {
if tempNumber == -1 {
tempNumber = Int(String(i))!
} else {
tempNumber = 10
}
} else if i.isLetter {
switch i {
case "S":
tempNumber *= 1
case "D":
tempNumber = Int(pow(Double(tempNumber), 2.0))
case "T":
tempNumber = Int(pow(Double(tempNumber), 3.0))
default:
continue
}
if j < dartResult.count - 1 && !(dartResult[j + 1].isNumber){
j += 1
continue
} else {
answer.append(tempNumber)
tempNumber = -1
}
} else {
switch i {
case "*" :
if answer.count == 0 {
answer.append(tempNumber * 2)
tempNumber = -1
} else {
answer[answer.count - 1] = answer.last! * 2
answer.append(tempNumber * 2)
tempNumber = -1
}
default:
answer.append(tempNumber * -1)
tempNumber = -1
}
}
j += 1
}
return answer.reduce(0, +)
}
728x90
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 - 모의고사(lv. 1) (0) | 2023.02.04 |
---|---|
[Swift] 프로그래머스 가장 가까운 같은 글자(lv. 1) (0) | 2023.02.03 |
[Swift] 프로그래머스 푸드 파이트 대회(lv. 1) (0) | 2023.02.01 |
[Swift] 프로그래머스 실패율(2019 KAKAO Blind Recruitment)(lv. 1) (0) | 2023.01.31 |
[Swift] 프로그래머스 콜라 문제(lv. 1) (0) | 2023.01.28 |
댓글