잡초의 일지

[Swift] 프로그래머스 | 코딩테스트 연습 -> 2018 KAKAO BLIND RECRUITMENT -> [1차] 다트 게임 본문

[코딩] 문제풀기/Swift

[Swift] 프로그래머스 | 코딩테스트 연습 -> 2018 KAKAO BLIND RECRUITMENT -> [1차] 다트 게임

JabCho 2021. 2. 19. 00:07
728x90
반응형
SMALL
func solution(_ dartResult:String) -> Int {
    var result: Array<Int> = []
    var points: Array<Int> = []
    let dartRes = Array(dartResult)
    var i = 0
    while (i < dartRes.count ){
        switch String(dartRes[i]) {
        case "S":
            break;
        case "D":
            let x = result.removeLast()
            result.append(x * x)
            break;
        case "T":
            let x = result.removeLast()
            result.append(x * x * x)
            break;
        case "*":
            result[result.count - 1] = result[result.count - 1] * 2
            if (result.count > 1){
                result[result.count - 2] = result[result.count - 2] * 2
            }
            break;
        case "#":
            let x = result.removeLast()
            result.append(x * -1)
            break;
        case "0":
            result.append(0)
            points.append(0)
            break;
        case "1":
            if (dartRes[i+1] == "0"){
                result.append(10)
                points.append(10)
                i += 1
            }else{
                result.append(1)
                points.append(1)
            }
            break;
        case "2":
            result.append(2)
            points.append(2)
            break;
        case "3":
            result.append(3)
            points.append(3)
            break;
        case "4":
            result.append(4)
            points.append(4)
            break;
        case "5":
            result.append(5)
            points.append(5)
            break;
        case "6":
            result.append(6)
            points.append(6)
            break;
        case "7":
            result.append(7)
            points.append(7)
            break;
        case "8":
            result.append(8)
            points.append(8)
            break;
        case "9":
            result.append(9)
            points.append(9)
            break;
        default:
            break;
        }
        
        i += 1
    }
    
    var finalRes = 0
    for point in result {
        finalRes += point
    }
    
    return finalRes
}

딕셔너리나 열거형으로 숫자를 구분할 수 있었다면 코드가 좀 더 간결해졌을 수도 있겠다.

나는 타입케스팅을 이용해 문자열을 배열로 바꾸었기 때문에, 10이 각각 1과0이 되어버려서, 구분을 하는데 어려움이 있었고, 예상치 못한 오류가 났었다.

이런 오류는 switch문의 case1에서 구분해 주었다. 

728x90
반응형
LIST
Comments