반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/17682?language=swift
풀이
func solution(_ dartResult:String) -> Int {
let numberList = dartResult.split(whereSeparator: {$0.isLetter || $0 == "#" || $0 == "*"})
let letterList = dartResult.split(whereSeparator: {$0.isNumber})
var totalScore = 0
for (i, (number, letter)) in zip(numberList, letterList).enumerated() {
var score = 0
if let number = Int(number) {
score = letter.contains("D") ? number * number : letter.contains("T") ? number * number * number : number
}
if letter.contains("*") {
score *= 2
} else if letter.contains("#") {
score = -score
}
if i != 2 {
if letterList[i + 1].contains("*") {
score *= 2
}
}
totalScore += score
}
return totalScore
}
- 문제 자체는 시간은 조금 걸렸지만 어렵지않게 해결했다.
- 다른 풀이를 보던 중 좋은 메서드를 발견해서 메모해둔다.
split(whereSeperator: )
를 통해 조건으로 separator 여부를 판단해 문자열을 자를 수 있다. 클로저로 해당하는 문자가 separator임을 판단할 수 있는 조건을 넣어주면 된다.
반응형
'💻 CS > 알고리즘 연습' 카테고리의 다른 글
[알고리즘 연습] 실패율 (프로그래머스 lv1, 스위프트) (0) | 2022.02.09 |
---|---|
[알고리즘 연습] 비밀지도 (프로그래머스 lv1, 스위프트) (0) | 2022.02.05 |
[알고리즘 연습] 시저 암호 (프로그래머스 lv1, 스위프트) (0) | 2022.02.02 |
[알고리즘 연습] 신규 아이디 추천 (프로그래머스 lv1, 스위프트) (0) | 2022.01.22 |
[알고리즘 연습] 소수 만들기 (프로그래머스 lv1, 파이썬) (2) | 2021.12.30 |