ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒ ์ •๋ฆฌ (Swift)
    Algorithm 2022. 1. 5. 10:40

    1. ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ ๋”ํ•˜๊ธฐ, ๋ชจ๋‘ ๊ณฑํ•˜๊ธฐ

    let arr = [1, 2, 3, 4, 5]
    
    // ๋ฐฐ์—ด์˜ ์š”์†Œ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’
    let addTotal = arr.reduce(0, +) // 15
    
    // ๋ฐฐ์—ด์˜ ์š”์†Œ ๋ชจ๋‘ ๊ณฑํ•œ ๊ฐ’
    let mulTotal = arr.reduce(1, *) // 120

     

    2. ๊ณต๋ฐฑ์œผ๋กœ ์ˆซ์ž ์—ฌ๋Ÿฌ ๊ฐœ ์ž…๋ ฅ ๋ฐ›์€ ํ›„ ์ •์ˆ˜ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๊ธฐ

    // components ์‚ฌ์šฉ
    var nums = readLine()!.components(separatedBy: " ").map { Int($0)! }
    var nums = readLine()!.components(separatedBy: " ").compactMap { Int($0) }
    
    // split ์‚ฌ์šฉ
    var nums = readLine()!.split(separator: " ").map { Int(String($0))! }
    var nums = readLine()!.split(separator: " ").compactMap { Int(String($0)) }

     

    3. ์—ฌ๋Ÿฌ ๋ฌธ์ž (๋˜๋Š” ์ˆซ์ž)๋ฅผ ๊ณต๋ฐฑ ์—†์ด ์ž…๋ ฅ ๋ฐ›์•˜์„ ๋•Œ,  ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๊ธฐ

    let result = readLine()!.map { (value: Character) -> Character in
        value
    }
    print(result)
    
    // ์ž…๋ ฅ1 : 1234567
    // ๊ฒฐ๊ณผ1 : ["1", "2", "3", "4", "5", "6", "7"]
    
    // ์ž…๋ ฅ2 : abcdefg
    // ๊ฒฐ๊ณผ2 : ["a", "b", "c", "d", "e", "f", "g"]
    
    
    
    // ๋˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์“ฐ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
    // strArr ํƒ€์ž…์€ [String.Element]()์ด๊ณ , Element๋Š” Character์˜ typealias.
    let strArr = Array(readLine()!)

     

     

    4. ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ๊ณ„์†ํ•ด์„œ ์—ฐ์‚ฐํ•˜๊ธฐ

    while let input = readLine() {
        print(input.split(separator: " ").map{ Int($0)! }.reduce(0, +))
    }

     

    5. ๋ฐฐ์—ด ์›ํ•˜๋Š” ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ

    var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
    students.sort(by: >)
    print(students)
    // Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"
    
    
    var num = [1, 2, 3, 4, 5]
    num.sort(by: >)
    print(num) // [5, 4, 3, 2, 1]
    
    var num2 = [5, 4, 3, 2, 1]
    num2.sort(by: <)
    print(num2) // [1, 2, 3, 4, 5]

     

    6. ์•„์Šคํ‚ค์ฝ”๋“œ ๊ตฌํ•˜๊ธฐ

    var word = Character(readLine()!).asciiValue // Swift 5 ์ด์ƒ์—์„œ๋งŒ ๊ฐ€๋Šฅ.
    print(word) // ํƒ€์ž…์€ UInt8
    
    // ์ž…๋ ฅ: a
    // ๊ฒฐ๊ณผ: Optional(97) => a์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ’์€ 97
    
    // Swift 5 ๋ฏธ๋งŒ์—์„œ๋Š” unicodeScalars ์‚ฌ์šฉ
    let ch: Character = "Z"
    let unicodeScalar = ch.unicodeScalars.first!.value // 90
    print(unicodeScalar) // 90 ์ถœ๋ ฅ. Z์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ’์€ 90
    
    
    // ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ
    let asciiCode = 65 // A์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ’
    let asciiStr = Character(UnicodeScalar(asciiCode)!) // asciiStr์—๋Š” A๊ฐ€ ์ €์žฅ๋œ๋‹ค.

     

     

    7. ์ˆ˜์˜ ๋ชจ๋“  ์ž๋ฆฟ์ˆ˜์˜ ํ•ฉ / ๊ณฑ ๊ตฌํ•˜๊ธฐ

    let num = 12345
    print(String(num).reduce(0) { $0 + Int(String($1))! }) // 1 + 2 + 3 + 4 + 5 = 15
    
    let num = 12345
    print(String(num).reduce(1) { $0 * Int(String($1))! }) // 1 * 2 * 3 * 4 * 5 = 120

     

     

    8. ๋ฌธ์ž์—ด ๋‚ด์—์„œ ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž๋งŒ ๋ฝ‘์•„๋‚ด๊ธฐ

    var str = "abcdef"
    print(str[String.Index(utf16Offset: 0, in: str)]) // a
    print(str[String.Index(utf16Offset: 1, in: str)]) // b
    print(str[String.Index(utf16Offset: str.count - 1, in: str)]) // f
    print(str[String.Index(utf16Offset: 1, in: str)...String.Index(utf16Offset: 3, in: str)]) // bcd
    print(str[String.Index(utf16Offset: 1, in: str)...]) // bcdef
    print(str[...String.Index(utf16Offset: 3, in: str)]) // abcd

     

     

    9. ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆซ์ž๋ฅผ ์ •์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ

    Int(s)! // ๋ถ€ํ˜ธ (+, -) ๋“ค์–ด๊ฐ€๋„ ์ƒ๊ด€์—†์Œ.

     

     

    10. ์ˆซ์ž๋งŒ ์ฐพ๊ธฐ

    var s = "12345"
    var charSet = CharacterSet(charactersIn: "0123456789").inverted // ์ˆซ์ž๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž
    
    if let _ = s.rangeOfCharacter(from: charSet) {
        print("์ˆซ์ž ์•„๋‹Œ ๋ฌธ์ž ํฌํ•จ๋˜์–ด์žˆ์Œ")
    } else {
        print("์ˆซ์ž๋งŒ ํฌํ•จ๋˜์–ด์žˆ์Œ")
    }

     

     

    11. [String] ๋ฐฐ์—ด ์›์†Œ๋ฅผ ํ•˜๋‚˜๋กœ ์ด์–ด์„œ ์ถœ๋ ฅํ•˜๊ธฐ

    let str = ["H", "e", "l", "l", "o"] // [String]
    print(str.joined()) // Hello

     

    12. ๋ฐฑ์ค€์—์„œ๋Š” ๋ฌธ์ž์—ด๋ณด๋‹ค ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋‚ซ๋‹ค. ๋ฌธ์ž์—ด ์“ฐ๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ๋‹ค.

    ๋ฐฐ์—ด ์ค‘์—์„œ๋„ [Character] ๋ฐฐ์—ด๋ณด๋‹ค [String] ๋ฐฐ์—ด์„ ์• ์šฉํ•˜๋„๋ก ํ•˜์ž.

     

     

    13. ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’ (max)๊ณผ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’ (min) ์ฐพ๊ธฐ

    let arr = [1, 2, 3, 4, 5]
    print(arr.max()!) // 5
    print(arr.min()!) // 1

     

    14. ๋ฐฐ์—ด์— enumerated()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, (index, value) ํŠœํ”Œ ํƒ€์ž…์œผ๋กœ ๊ตฌํ˜„๋œ ๋ฆฌ์ŠคํŠธํ˜•์ด ๋ฆฌํ„ด๋œ๋‹ค.

    var result = ["A", "B", "C", "D"]
    var dictionary = [String: Int]()
    
    // array ๊ฐ’์— enumerated()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, (index, value) ํŠœํ”Œํ˜•์‹์œผ๋กœ ๊ตฌํ˜„๋œ ๋ฆฌ์ŠคํŠธํ˜•์ด ๋ฆฌํ„ด๋œ๋‹ค.
    for (index, value) in result.enumerated() {
      dictionary[value] = index
    }
    
    print(dictionary) // ["B": 1, "A": 0, "C": 2, "D": 3]

     

    15. zip ์‚ฌ์šฉ๋ฒ•

    var result = ["A", "B", "C", "D"]
    var anotherResult = ["๐Ÿ’œ", "๐Ÿ’›", "๐Ÿ’š", "๐Ÿ’™"]
    var dictionary = [String: String]()
    
    for (alphabet, heart) in zip(result, anotherResult) {
      dictionary[alphabet] = heart
    }
    print(dictionary) // ["D": "๐Ÿ’™", "C": "๐Ÿ’š", "A": "๐Ÿ’œ", "B": "๐Ÿ’›"]

     

    16. ๋ฌธ์ž์—ด์„ String ๋ฐฐ์—ด ๋˜๋Š” Character ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

    // ๋ฌธ์ž์—ด -> String ๋ฐฐ์—ด
    let str1 = "ABC"
    let array1 = str1.map { String($0) }
    print(array1, type(of: array1)) // ["A", "B", "C"] Array<String>
    
    // ๋ฌธ์ž์—ด -> Character ๋ฐฐ์—ด
    let str2 = "ABC"
    let arr2 = Array(str2)
    print(arr2, type(of: arr2)) // ["A", "B", "C"] Array<Character>

     

    17. ์ž…๋ ฅ 2๊ฐœ๋ฅผ ๋ฐ›์•„์„œ 2์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ

    # ์˜ˆ์‹œ ์ถœ๋ ฅ: [["์‚ฌ๊ณผ", 1], ["ํฌ๋„", 2], ["๋ณต์ˆญ์•„", 3], ["๋”ธ๊ธฐ", 4], ["ํŒŒ์ธ์• ํ”Œ", 5]]
    let fruitList = readLine()!.split(separator: " ").map { String($0) }
    let countList = readLine()!.split(separator: " ").compactMap { Int($0) }
    
    // zip์„ ์ด์šฉํ•ด ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ํŠœํ”Œ๋กœ ๋ฌถ์€ ๋ฐฐ์—ด ์ƒ์„ฑ
    let pairedList = Array(zip(fruitList, countList))
    
    print(pairedList)

     

    18. ์ž…๋ ฅ 2๊ฐœ ๋ฐ›์•„์„œ ํŠœํ”Œ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค๊ธฐ

    # ์˜ˆ์‹œ ์ถœ๋ ฅ: [("์‚ฌ๊ณผ", 1), ("ํฌ๋„", 2), ("๋ณต์ˆญ์•„", 3), ("๋”ธ๊ธฐ", 4), ("ํŒŒ์ธ์• ํ”Œ", 5)]
    let fruitList = readLine()!.split(separator: " ").map { String($0) }
    let countList = readLine()!.split(separator: " ").compactMap { Int($0) }
    
    // zip์„ ์ด์šฉํ•ด ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ๋ฌถ์€ ํ›„, ๊ฐ๊ฐ์„ ์ด์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
    let pairedList = zip(fruitList, countList).map { [$0.0, "\($0.1)"] }
    
    print(pairedList)

     

    19. ๋ฐฐ์—ด์˜ ์ค‘๋ณต ์š”์†Œ ์ œ๊ฑฐํ•˜๊ธฐ (์ค‘๋ณต ์ œ๊ฑฐ & ์›๋ž˜ ๋ฐฐ์—ด ์ˆœ์„œ ์œ ์ง€)

    let array = [1, 2, 2, 3, 4, 4, 5]
    var seen = Set<Int>()
    
    let uniqueArray = array.filter { element in
        if seen.contains(element) {
            return false
        } else {
            seen.insert(element)
            return true
        }
    }
    
    print(uniqueArray)  // ์ถœ๋ ฅ: [1, 2, 3, 4, 5]
    
    
    // ์ถ•์•ฝ ์ฝ”๋“œ
    let array = [11, 5, 125, 3, 125, 2, 2, 3, 4, 4, 5]
    var seen = Set<Int>()
    
    let uniqueArray = array.filter { seen.insert($0).inserted }
    
    print(uniqueArray)  // ์ถœ๋ ฅ: [11, 5, 125, 3, 2, 4]

     

    20. ํŠน์ • ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๋ฐ˜์˜ฌ๋ฆผํ•ด์„œ ๋‚˜ํƒ€๋‚ด๊ธฐ

    let result = Double(Double(1)/Double(6))
    print(result) // 0.16666666666666666
    
    // ๋ฐ˜์˜ฌ๋ฆผ
    let formatted = String(format: "%.5f", result)
    print(formatted) // 0.16667
    
    let multiplier = 100000.0  // 10^5, ์†Œ์ˆซ์  5์ž๋ฆฌ๊นŒ์ง€๋ผ๊ณ  ๊ฐ€์ •
    
    // ์˜ฌ๋ฆผ:
    let ceilingResult = Double(ceil(result * multiplier)) / multiplier
    print("์˜ฌ๋ฆผ:", ceilingResult)  // ์ถœ๋ ฅ ์˜ˆ: 0.16667 (์ž…๋ ฅ๊ฐ’์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง)
    
    // ๋ฒ„๋ฆผ:
    let floorResult = Double(floor(result * multiplier)) / multiplier
    print("๋ฒ„๋ฆผ:", floorResult)  // ์ถœ๋ ฅ ์˜ˆ: 0.16666 (์ž…๋ ฅ๊ฐ’์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง)

     

    23. String์—์„œ ๋ฌธ์ž์™€ ์ˆซ์ž๋งŒ ๋‚จ๊ธฐ๊ธฐ

    var inputString = "A man, a plan, a canal: Panama"
    var newString: String = ""
    inputString.forEach {
        if ($0.isLetter || $0.isNumber) {
            newString.append($0)
        }
    }
    print(inputString)
    print(newString) // AmanaplanacanalPanama

    ๋Œ“๊ธ€

Designed by Tistory.