• 알고리즘 문제 풀이에 필요한 Swift 팁 정리

    2021. 3. 26.

    by. beeem

     

    수정 날짜 : 2021.05.18

     

    입력받기


    정수 1개 입력받기

    var n = Int(readLine()!)!

    공백 단위로 정수형 배열 입력받기

    var arr = readLine()!.split(separator: " ").map { Int($0)! }
    
    // 이게 더 빠름
    var arr = readLine()!.split(separator: " ").map { Int(String($0))! }

     

     

    출력


    소수점 이하 k번째 자리까지 출력

    • 소수점 이하 k+1번째 자리에서 반올림하여 소수점 이하 k번째 자리까지 출력
    var a = 1.637999
    var b = round(a * 1000) / 1000
    
    let c = String(format: "%.3f", b) // 1.638
    
    // 또는
    //var c = String(format: "%.3f", (a * 1000).rounded() / 1000)

     

     

     

    Math


    n 제곱

    import Foundation
    
    pow(3, 2) // 9

     

     

     

    String


    String은 값 타입(value type)이므로 다른 함수나 메서드로부터 생성되면 값을 복사해서 생성하기 때문에 수정해도 원본 문자열이 수정되지 않는다.

    문자열 길이

    let strings = "abcde"
    print(strings.count) // 5

    출처

     

    Apple Developer Documentation

     

    developer.apple.com

    • RandomAccessCollection(랜덤 접근 컬렉션)은 O(1)의 복잡도를 보장하지만, 그렇지 않다면 O(n)의 복잡도 즉, collection의 길이만큼 시간이 걸린다는 내용이다. 
    • 따라서 String의 길이를 이용한 문제는 Array로 변환하여 사용하면 시간을 단축시킬 수 있다.
    • 배열은 RandomAccessCollection이므로 O(1)의 복잡도를 갖는다.

    공백 지우기

    let str = "   Hi there   "
    let trimmed = str.trimmingCharacters(in: .whitespacesAndNewlines)
    
    print(str)
    print(trimmed)

    배열 String으로 변환 후 join하기 -> String

    배열 원소들을 문자열로 반환

    var array = [1, 2, 3]
    print(array.map { String($0) }.joined(separator: " ") // "1 2 3"

     

    Array


    기본 값으로 배열 생성

    • repeating메서드와 count메서드를 이용
      var threeDoubles = Array(repeating: 0.0, count: 3)
      // threeDoubles : Double 타입의 [0.0, 0.0, 0.0]

    2차원 배열 생성

    1. 빈 배열 생성 후 입력받기
    let n = Int(readLine()!)!
    
    var house: [[Int]] = []
    
    for _ in stride(from: 0, to: n, by: 1) {
      house.append(readLine()!.split(separator: " ").map { Int(String($0))! })
    }
    
    print(house)

    입력
    3
    26 40 83
    49 60 57
    13 89 99

    출력
    [[26, 40, 83], [49, 60, 57], [13, 89, 99]]

    1. repeatingcount메서드를 이용해서 생성하기
    // INF 값으로 채워진 (n + 1) x (n + 1) 크기의 2차원 배열
    var graph = Array(repeating: Array(repeating: INF, count: n + 1), count: n + 1)
    
    // n개의 행을 갖는 2차원 빈 배열
    var graph = Array(repeating: Array<Int>(), count: n)
    var graph = [[Int]](repeating: [Int](), count: n)

    '공부 > Swift' 카테고리의 다른 글

    print() vs dump()  (0) 2021.06.02
    Swift : ASCII 코드 변환 방법  (0) 2021.05.17

    댓글