-
[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, *) // 1202. ๊ณต๋ฐฑ์ผ๋ก ์ซ์ ์ฌ๋ฌ ๊ฐ ์ ๋ ฅ ๋ฐ์ ํ ์ ์ ๋ฐฐ์ด๋ก ์ ์ฅํ๊ธฐ
// 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 = 1208. ๋ฌธ์์ด ๋ด์์ ์ํ๋ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๋ฌธ์๋ง ๋ฝ์๋ด๊ธฐ
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)]) // abcd9. ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ์ซ์๋ฅผ ์ ์๋ก ๋ฐ๊พธ๊ธฐ
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()) // Hello12. ๋ฐฑ์ค์์๋ ๋ฌธ์์ด๋ณด๋ค ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒ ๋ซ๋ค. ๋ฌธ์์ด ์ฐ๋ฉด ์๊ฐ์ด๊ณผ ๋๋ ๊ฒฝ์ฐ๊ฐ ๊ต์ฅํ ๋ง๋ค.
๋ฐฐ์ด ์ค์์๋ [Character] ๋ฐฐ์ด๋ณด๋ค [String] ๋ฐฐ์ด์ ์ ์ฉํ๋๋ก ํ์.
13. ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ๊ฐ (max)๊ณผ ๊ฐ์ฅ ์์ ๊ฐ (min) ์ฐพ๊ธฐ
let arr = [1, 2, 3, 4, 5] print(arr.max()!) // 5 print(arr.min()!) // 114. ๋ฐฐ์ด์ 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'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๋ฐฑ์ค 1157 ๋จ์ด ๊ณต๋ถ (Swift/C++) (0) 2022.01.31 [Algorithm] ๋ฐฑ์ค 10809 ์ํ๋ฒณ ์ฐพ๊ธฐ(Swift/C++) (0) 2022.01.30 [Algorithm] ๋ฐฑ์ค 11654 ์์คํค์ฝ๋ (Swift/C++) (0) 2022.01.30 [Algorithm] ์๊ฐ ๋ณต์ก๋ & ๊ณต๊ฐ ๋ณต์ก๋ (0) 2022.01.12 [Algorithm] ์๊ณ ๋ฆฌ์ฆ ํ ์ ๋ฆฌ (C++) (0) 2022.01.05