[πŸ“ iOS TIL] #9 ... 🍎 Swift οΌ† Algorithm πŸ–₯️

TaeUkΒ·2024λ…„ 3μ›” 6일
0

🍎 iOS TIL

λͺ©λ‘ 보기
8/18
post-thumbnail

[level 1] 콜라츠 μΆ”μΈ‘ - 12943

  • 문제 μ„€λͺ…
    1937λ…„ Collatzλž€ μ‚¬λžŒμ— μ˜ν•΄ 제기된 이 좔츑은, 주어진 μˆ˜κ°€ 1이 될 λ•ŒκΉŒμ§€ λ‹€μŒ μž‘μ—…μ„ λ°˜λ³΅ν•˜λ©΄, λͺ¨λ“  수λ₯Ό 1둜 λ§Œλ“€ 수 μžˆλ‹€λŠ” μΆ”μΈ‘μž…λ‹ˆλ‹€. μž‘μ—…μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1-1. μž…λ ₯된 μˆ˜κ°€ 짝수라면 2둜 λ‚˜λˆ•λ‹ˆλ‹€.
1-2. μž…λ ₯된 μˆ˜κ°€ ν™€μˆ˜λΌλ©΄ 3을 κ³±ν•˜κ³  1을 λ”ν•©λ‹ˆλ‹€.
2. 결과둜 λ‚˜μ˜¨ μˆ˜μ— 같은 μž‘μ—…μ„ 1이 될 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 주어진 μˆ˜κ°€ 6이라면 6 β†’ 3 β†’ 10 β†’ 5 β†’ 16 β†’ 8 β†’ 4 β†’ 2 β†’ 1 이 λ˜μ–΄ 총 8번 λ§Œμ— 1이 λ©λ‹ˆλ‹€. μœ„ μž‘μ—…μ„ λͺ‡ λ²ˆμ΄λ‚˜ λ°˜λ³΅ν•΄μ•Ό ν•˜λŠ”μ§€ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•΄ μ£Όμ„Έμš”. 단, 주어진 μˆ˜κ°€ 1인 κ²½μš°μ—λŠ” 0을, μž‘μ—…μ„ 500번 λ°˜λ³΅ν•  λ•ŒκΉŒμ§€ 1이 λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ –1을 λ°˜ν™˜ν•΄ μ£Όμ„Έμš”.

문제 풀이

func solution(_ num:Int) -> Int {
    var count: Int = 0
    var val = num
    
    while val != 1 {
        if count >= 500 {
            break
        }
        
        val = val % 2 == 0 ? val / 2 : (val * 3) + 1
        
        count += 1
    }
    
    return val == 1 ? count : -1
}

μ•žμ„œ ν’€μ—ˆλ˜ 문제처럼 μ—¬λŸ¬ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제 풀이λ₯Ό μ‹œλ„ν•˜μ˜€λ‹€.

num 값을 ν™œμš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ λ°›λŠ” 배열을 λ§Œλ“€μ–΄, μœ„ ν’€μ΄μ˜ μ‚Όν•­μ—°μ‚° κ²°κ³Όλ₯Ό 배열에 μž…λ ₯μ‹œν‚¬ κ³„νšμ΄μ—ˆλ‹€. 이후, λ°°μ—΄μ˜ 길이λ₯Ό μ΄μš©ν•˜μ—¬ μž‘μ—…μ˜ 반볡 횟수λ₯Ό νŒλ‹¨ν•˜κ³  arr.last == 1으둜 μž‘μ—…μ΄ λ§ˆλ¬΄λ¦¬λ˜λŠ” 것을 ν™•μΈν•˜λ €κ³  μ‹œλ„ν•˜μ˜€λ‹€.

μ΄λ ‡κ²Œ κ΅¬μƒν•œ 방법이 λ”μš± 짧은 μ½”λ“œλ₯Ό λ§Œλ“€κΈ° μ‰¬μšΈ λ“― ν•˜μ˜€μœΌλ‚˜, λ§Žμ€ μ‹œλ„μ—λ„ κ΅¬ν˜„ν•˜κΈ° μ–΄λ €μ›Œ ν¬κΈ°ν•˜μ˜€λ‹€... 😭

κ·Έλž˜μ„œ 일단은 문제 풀이가 κ°€λŠ₯ν•œ κΈ°λŠ₯의 μ½”λ“œλ§Œ κ΅¬ν˜„ν•˜μ˜€λ‹€..

λ‹€μŒμ— λ‹€λ₯Έ 방법이 μƒκ°λ‚œλ‹€λ©΄ λ‹€μ‹œ ν’€μ–΄λ³Όκ±°λ‹€!!


[level 1] μ„œμšΈμ—μ„œ κΉ€μ„œλ°© μ°ΎκΈ° - 12919

  • 문제 μ„€λͺ…
    Stringν˜• λ°°μ—΄ seoul의 element쀑 "Kim"의 μœ„μΉ˜ xλ₯Ό μ°Ύμ•„, "κΉ€μ„œλ°©μ€ x에 μžˆλ‹€"λŠ” String을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•˜μ„Έμš”. seoul에 "Kim"은 였직 ν•œ 번만 λ‚˜νƒ€λ‚˜λ©° 잘λͺ»λœ 값이 μž…λ ₯λ˜λŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.
func solution(_ seoul:[String]) -> String {
    var pos = seoul.firstIndex(of: "Kim")
    
    return "κΉ€μ„œλ°©μ€ \(pos)에 μžˆλ‹€"
}

이번 λ¬Έμ œλŠ” λ‹€λ₯Έ λ¬Έμ œλ“€μ— λΉ„ν•΄ 맀우 쉬웠닀! μž…λ ₯λ˜λŠ” λ°°μ—΄ 쀑, "KIM"μ΄λΌλŠ” κ°’λ§Œ 찾으면 λ˜κΈ°μ—, seoul.firstIndex(of: "Kim")으둜 ν•΄λ‹Ή κ°’κ³Ό λ°°μ—΄μ˜ μΈνƒμŠ€ 값을 λΉ„κ΅ν•˜μ—¬ μœ„μΉ˜λ₯Ό μ°Ύμ•˜λ‹€. 그리고 ν•΄λ‹Ή 값을 μ–΄μ œ κ°•μ˜μ—μ„œ 배운 문자 보간법을 ν™œμš©ν•˜μ—¬ 좜λ ₯ν•΄μ£Όμ—ˆλ‹€.


[level 1] μŒμ–‘ λ”ν•˜κΈ° - 76501

  • 문제 μ„€λͺ…
    μ–΄λ–€ μ •μˆ˜λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이 μ •μˆ˜λ“€μ˜ μ ˆλŒ“κ°’μ„ μ°¨λ‘€λŒ€λ‘œ 담은 μ •μˆ˜ λ°°μ—΄ absolutes와 이 μ •μˆ˜λ“€μ˜ λΆ€ν˜Έλ₯Ό μ°¨λ‘€λŒ€λ‘œ 담은 λΆˆλ¦¬μ–Έ λ°°μ—΄ signsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. μ‹€μ œ μ •μˆ˜λ“€μ˜ 합을 κ΅¬ν•˜μ—¬ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.
import Foundation

func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
    var ans: Int = 0
    
    for i in 0...absolutes.count-1 {
        if signs[i] == true {
            ans += absolutes[i]
        }
        else {
            ans -= absolutes[i]
        }        
    }
    
    print(ans)
    
    return ans
}

ν•΄λ‹Ή λ¬Έμ œλ„ 맨 처음 문제처럼 μ—¬λŸ¬ ν•¨μˆ˜λ“€κ³Ό λ¬Έμžμ—΄μ„ λ°›λŠ” 배열을 ν™œμš©ν•˜μ—¬ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ§Žμ€ μ‹œλ„λ₯Ό ν•˜μ˜€λ‹€.

ν•˜μ§€λ§Œ μœ„ μ½”λ“œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ μ‹€νŒ¨ν•˜μ˜€λ‹€...

κ·Έλž˜μ„œ 문제 쑰건에 μ•Œλ§žκ²Œ 쑰건문을 ν™œμš©ν•˜μ—¬ 문제λ₯Ό ν’€μ—ˆλ‹€. 그리고 이λ₯Ό 쑰금 더 가독성을 높이기 μœ„ν•΄ μ‚Όν•­μ—°μ‚°μžλ₯Ό ν™œμš©ν•˜μ—¬ μ•„λž˜μ˜ μ½”λ“œλ‘œ λ§ˆλ¬΄λ¦¬ν•˜μ˜€λ‹€.

import Foundation

func solution(_ absolutes:[Int], _ signs:[Bool]) -> Int {
    var ans: Int = 0
    
    for i in 0...absolutes.count-1 {
       (signs[i] == true) ? (ans += absolutes[i]) : (ans -= absolutes[i])
    }
    
    return ans
}

μ•„λ§ˆ 맨 처음 문제λ₯Ό μˆ˜μ •ν•  수 μžˆλŠ” 방법을 찾게 되면, 이 λ¬Έμ œλ„ λ°°μ—΄κ³Ό μ—¬λŸ¬ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν’€μ–΄λ³Ό 수 μžˆμ„ 것이닀.

λ‹€μŒμ— 이 λ¬Έμ œλ„ λ‹€μ‹œ ν’€μ–΄λ³Ό 것이닀!!


Swift 기초 문법 κ°•μ˜ 정리 πŸ’» #3

μ˜΅μ…”λ„κ³Ό nil

μ˜΅μ…”λ„

μ˜΅μ…”λ„μ€ 값이 없을 수 μžˆλŠ” μƒν™©μ—μ„œ μ‚¬μš©ν•œλ‹€. 그리고 두 가지 κ°€λŠ₯성을 λ‚˜νƒ€λ‚΄λ©°, λ¬ΌμŒν‘œ ? λ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œμ‹œν•œλ‹€.

μ˜΅μ…”λ„ νƒ€μž…λΌλ¦¬μ˜ 연산은 λΆˆκ°€λŠ₯!

var num1: Int? = 4

μ˜΅μ…”λ„ νƒ€μž…μ„ 찾아보면 some, none case둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€!

nil

ν•΄λ‹Ή 값을 ν™œμš©ν•˜μ—¬ μ˜΅μ…”λ„ ν˜•νƒœμ˜ 데이터에 값이 μ—†λŠ” μƒνƒœλ‘œ μ €μž₯ν•  수 μžˆλ‹€.

var num: Int? = nil

SwiftλŠ” μ˜΅μ…”λ„ νƒ€μž…μ„ ν™œμš©ν•˜μ—¬ nill을 μ²˜λ¦¬ν•˜κΈ°μ— λŸ°νƒ€μž„ 였λ₯˜λ₯Ό μ΅œμ†Œν•˜ ν•˜μ—¬ μ•ˆμ •μ μ΄λ‹€!

μ˜΅μ…”λ„ 바인딩

μ˜΅μ…”λ„ 값이 λΉˆκ°’μΈμ§€ μ‘΄μž¬ν•˜λŠ”μ§€ κ²€μ‚¬ν•œ ν›„, μ‘΄μž¬ν•˜λŠ” 경우 κ·Έ 값을 λ‹€λ₯Έ λ³€μˆ˜μ— λŒ€μž…μ‹œμΌœ λ°”μΈλ”©ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

μ˜΅μ…”λ„μ„ μ‚¬μš©ν•˜κΈ° 전에, 내뢀에 빈 κ°’μ˜ 유무λ₯Ό μ²΄ν¬ν•˜κ³  μ–Έλž˜ν•‘ ν•΄μ£ΌλŠ” 것이 κ°•μ œλ‘œ μ–Έλž˜ν•‘ν•˜λŠ” 것보닀 훨씬 μ•ˆμ „ν•˜λ‹€.


Swift 기초 문법 κ°•μ˜ 정리 πŸ’» #4

μŠ€νƒ, 큐

Queue

First-In-First-Out (FIFO)

struct Queue<T> {
    private var queue: [T] = []
    
    public var count: Int {
        return queue.count
    }
    
    public var isEmpty: Bool {
        return queue.isEmpty
    }
    
    public mutating func enqueue(_ element: T) {
        queue.append(element)
    }
    
    public mutating func dequeue() -> T? {
        return isEmpty ? nil : queue.removeFirst()
    }
}

var queue = Queue<Int>()
queue.enqueue(10)
queue.enqueue(20)
queue.dequeue() // 10

Stack

Last-In-First-Out (LIFO)

struct Stack<T> {
    private var stack: [T] = []
    
    public var count: Int {
        return stack.count
    }
    
    public var isEmpty: Bool {
        return stack.isEmpty
    }
    
    public mutating func push(_ element: T) {
        stack.append(element)
    }
    
    public mutating func pop() -> T? {
        return isEmpty ? nil : stack.popLast()
    }
}

var stack = Stack<Int>()
stack.push(10)
stack.push(20)
stack.pop() // 20

이제 κ°•μ˜ 전체 λΆ„λŸ‰ 쀑 μ ˆλ°˜λ³΄λ‹€ 쑰금 더 λ“€μ—ˆλŠ”λ°, λ‚΄μš©μ„ μ •λ¦¬ν•˜λ©΄μ„œ λ™μ‹œμ— κ°•μ˜λ₯Ό μˆ˜κ°•ν•˜λ‹ˆκΉŒ 속도기 λ„ˆλ¬΄ 느린거 κ°™λ‹€..

κ·Έλž˜μ„œ λ‚˜λ¨Έμ§€ λ‚΄μš©λ“€μ€ κ°•μ˜λ₯Ό λ‹€ λ“£κ³  λ‚΄μš©μ΄ μ΄ν•΄λ˜λ©΄ λ‹€μ‹œ 정리해보겠닀!

2개의 λŒ“κΈ€

comment-user-thumbnail
2024λ…„ 3μ›” 6일

κ°•μ˜ λ‚΄μš©μ„ μ½”λ“œλ‘œ μ •λ¦¬ν•˜λ‹ˆκΉŒ κΉ”λ”ν•˜κ³  λ³΅μŠ΅λ„ λΌμ„œ λ„ˆλ¬΄ 잘 μ½μ—ˆμŠ΅λ‹ˆλ‹€ :)

1개의 λ‹΅κΈ€