[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 다트 게임 (프로그래머스 lv1, 스위프트)

inu 2022. 2. 5. 18:20
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/17682?language=swift

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

풀이

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임을 판단할 수 있는 조건을 넣어주면 된다.
반응형