BOJ

problem 2775 부녀회장이 될테야

A new way to get inputs

if let input = readLine() {
    let n = Int(input) ?? 0
    
    var floors: [Int] = [Int](repeating: 0, count: n)
    var units: [Int] = [Int](repeating: 0, count: n)
    
    for i in 0..<n {
        if let f = readLine() {
            floors[i] = Int(f) ?? 0
        }
        if let u = readLine() {
            units[i] = Int(u) ?? 0
        }
    }
}

Using optional binding for input

    func getNumberOfPeopleIn(floor: Int, unit: Int) -> Int{
        var tmpPeople: Int = 0
        if floor == 1 {
            for i in 1...unit {
                tmpPeople += i
            }
            return tmpPeople
        }
        
        for i in 1...unit {
            tmpPeople += getNumberOfPeopleIn(floor: floor - 1, unit: i)
        }
        return tmpPeople
    }
    
    for i in 0..<n{
        print(getNumberOfPeopleIn(floor: floors[i], unit: units[i]))
    }

재귀 함수를 사용하여 문제를 해결했다.


TIL in solving this algorithm problem

Array Initialize

    var floors: [Int] = [Int](repeating: 0, count: n+1)
    var units: [Int] = [Int](repeating: 0, count: n+1)

해당 array를 0으로 모두 초기화

Optional

Swift에서 “값이 없음”을 표현하는 새로운 개념. Swift는 Reference type, Value type 관계없이 nil을 사용하여 “값이 없음”을 표현한다.

Optional은 nil값을 가질 수 있는(유효한 값이 저장되어 있지 않을 수도 있는) reference type과 value type을 Optional type이라고 한다.

Optional Binding

optional type에 값이 저장되어 있지 않을 때, 다시 말해 nil이 할당되어 있을 때 값을 추출하는 것을 런타임 오류의 원인이 된다. 그래서 optional type에 저장된 값을 사용하기 전에 값의 유효성을 검사한다.

if let 상수명 = 옵셔널 표현식 {
    // 바인딩이 성공했을 때 실행할 코드
}

+Refactoring

/*
 백준 1193 문제
 */

import Foundation

if let input = readLine() {
    let N = Int(input) ?? 0
    
    var tmpNumber = N
    var n: Int = 1;
    
    while tmpNumber > 0 {
        tmpNumber = tmpNumber - n
        n += 1
    }
    
    let lineNumber: Int = n - 1
    let restNumber: Int = tmpNumber + (n - 1)
    
    if lineNumber % 2 == 0 {
        print("\(restNumber)/\(lineNumber-(restNumber-1))")
    } else {
        print("\(lineNumber-(restNumber-1))/\(restNumber)")
    }
}

약간의 시간이 증가했다. 왜?

댓글남기기