MUKER_DEV with iOS

[swift] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - [1μ°¨] λ‹€νŠΈ κ²Œμž„ λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/programmers

[swift] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - [1μ°¨] λ‹€νŠΈ κ²Œμž„

MUKER 2023. 1. 18. 17:37
 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr


문제 ν‘ΈλŠ” 데 μžˆμ–΄ 도움이 λ˜λ„λ‘ λ‚˜μ˜ 풀이와 κ°œμ„ λœ 풀이λ₯Ό μ˜¬λ¦½λ‹ˆλ‹€.
λ˜ν•œ 풀이 ν›„ λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이λ₯Ό 보고 μ°Έκ³ ν• λ§Œν•œ 풀이도 μ˜¬λ¦½λ‹ˆλ‹€.

- λ¬Έμ œμ— 따라 λ‚˜μ˜ ν’€μ΄λ§Œ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
- ν•΄λ‹Ή 풀이듀은 풀이 쀑 ν•˜λ‚˜μΌ 뿐 μ΅œμ„ μ˜ ν’€μ΄λŠ” 아닐 수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ‚˜μ˜ 풀이

import Foundation

func solution(_ dartResult:String) -> Int {
    var num = [Int]()
    var numCount = 0
    var last = ""
    
    dartResult.forEach { i in
        if Int(String(i)) != nil {
            num.append(Int(String(i))!)
            numCount += 1
        }
        switch i {
        case "0":
            if num.count >= 1 && last == "1" {
                num[numCount-2] += 9
                num.removeLast()
                numCount -= 1
            }
        case "D": num[numCount-1] = num[numCount-1] * num[numCount-1]
        case "T": num[numCount-1] = num[numCount-1] * num[numCount-1] * num[numCount-1]
        case "*":
            if num.count == 1 {
                num[numCount-1] = num[numCount-1] * 2
            } else {
                num[numCount-1] = num[numCount-1] * 2
                num[numCount-2] = num[numCount-2] * 2
            }
        case "#": num[numCount-1] = num[numCount-1] * (-1)
        default: last = "\(i)" return
        }
        last = "\(i)"
    }
    return num.reduce(0,+)
}

 

Int배열을 λ§Œλ“€μ–΄μ„œ 3번의 점수λ₯Ό λ„£μ–΄, 총 합을 κ΅¬ν•΄μ£ΌλŠ” λ°©μ‹μœΌλ‘œ ν’€μ—ˆμŠ΅λ‹ˆλ‹€.

점수 10점이 μ•„λ‹Œ 1,0점으둜 λ”°λ‘œ μΈμ‹ν•˜κΈ° λ•Œλ¬Έμ—

0이 λ‚˜μ˜¨λ‹€λ©΄ μ „μ˜ 문자λ₯Ό κΈ°μ–΅ν•˜μ—¬ 1μ΄μ—ˆλ‹€λ©΄1에 9λ₯Ό 더해 10을 λ§Œλ“€μ–΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

 

 


κ°œμ„ λœ 풀이

import Foundation

func solution(_ dartResult:String) -> Int {
    var scores = dartResult.split(whereSeparator: { !$0.isNumber }).map { Int($0)! }
    let letters = dartResult.split(whereSeparator: { $0.isNumber })
    
    for (index, letter) in letters.enumerated() {
        letter.forEach {
            let score = scores[index]
            switch $0 {
            case "D":
                scores[index] = score * score
            case "T":
                scores[index] = score * score * score
            case "*":
                scores[index] = 2 * score
                if index - 1 >= 0 {
                    scores[index - 1] = 2 * scores[index - 1]
                }
            case "#":
                scores[index] = -score
            default:
                break
            }
        }
    }
    return scores.reduce(0, +)
}

 

ν•΄λ‹Ή ν’€μ΄λŠ” split의 whereSeparator νŒŒλΌλ―Έν„°λ₯Ό μ΄μš©ν•΄μ„œ

μˆ«μžμ™€ 문자 각각 λ‘κ°œμ˜ 배열을 λ§Œλ“€μ–΄ ν’€μ–΄μ€¬λ„€μš”.

 

ν•΄λ‹Ήν’€μ΄λŠ” 숫자 1,0을  λ”°λ‘œ 닀루지 μ•Šκ³ 

μ˜¨μ „νžˆ 10으둜 μΆ”μΆœν•  수 있기 λ•Œλ¬Έμ—

훨씬 κΉ”λ”ν•˜κ²Œ 풀이가 λ‚˜μ˜€λ„€μš”.