Search

[알고리즘] 잡다한 알고리즘 지식 정리 - 계속 업데이트 예정

 Print

print
print(1, 2, 3, 4, 5, 6, separator: "...", terminator: "끗!\n") // 1...2...3...4...5...6끗!
Swift
복사

 Component vs. Split

Component
Split
return [String]
return [Subsquence]
import Foundation 필요
import Foundation 불필요
Empty Subsequence를 항상 리턴 → 따라서, Split 보다 속도가 느림
omit를 true로 설정했을 경우 Empty Subsequence 리턴 → 원하면 “”(빈 값) return 안함
문자열로 Split 가능
Character로만 Split 가능
max Split 지정 가능
O(n)의 시간 복잡도

 반복문

Swift에는 do-while 이 없음 → repeat-while 로 사용
repeat { print("repeat-while!") } while n > 10
Swift
복사
ForEach, For-In
단순 배열 생성 시에는 map를 사용하는 것이 더 효과적
ForEach
For-In
return으로 중간에 빠져나옴
break로 중간에 빠져나옴
break, continue 사용 불가
break, continue 사용 가능
ForEach 보다 속도가 빠름
filter, reduce 보다 속도가 빠름
Stride
// through에 들어가는 value가 범위에 포함 stride(from: _, through: _, by: _) // to에 들어가는 value는 범위에 포함되지 않음 stride(from: _, to: _, by: _) // 거꾸로 for문 돌리기 stride(from: n, through: 0, by: -1) // == for i in array.reversed()
Swift
복사
입력 값만큼 for문을 돌려야 할 때
for _ in 0..<Int(readLine()!)! { }
Swift
복사

 String

Ascii to String, Character
Character(UnicodeScalar(97)) String(UnicodeScalar(97))
Swift
복사
String, Character to Acsii
Character("a").asciiValue!
Swift
복사
문자 대치
replacingOccurrences(of: "*", with: "-")
Swift
복사
소수 셋째자리까지
String(format: "%0.3f", value)
Swift
복사

 Int

UInt 범위를 넘는 Int 값은 [Int]로 만들어서 사용 → 각각의 원소를 더하는 식으로(carry 올림 사용)
// 너무 긴 Int 값을 배열로 바꿔서 각각의 원소의 값을 더해줌 //let arr = readLine()!.split(separator: " ") //let a = splitNum(String(arr[0])), b = splitNum(String(arr[1])) //let l = isALonger(a,b) ? a : b //let s = isALonger(a,b) ? b : a //print(addNum(l,s)) func splitNum(_ str: String) -> [Int] { let intArr = str.map { Int(String($0))! } return intArr } func isALonger(_ a: [Int],_ b: [Int]) -> Bool { return a.count >= b.count ? true : false } func addNum(_ l: [Int],_ s: [Int]) -> String { var long = l, short = s var carry = 0, sum = 0 var result = "" func updateResult() { if sum > 9 { carry = 1 sum = long.isEmpty ? sum : sum - 10 } result = String(sum) + result } while !short.isEmpty { sum = long.removeLast() + short.removeLast() + carry carry = 0 updateResult() } while !long.isEmpty { sum = long.removeLast() + carry carry = 0 updateResult() } return result }
Swift
복사
10757. 큰 수 A+B

 고차함수

flatMap → flatten, nil 제거, 옵셔널 바인딩 → compactMap
2차원 배열 → 1차원 배열
flatMap, compactMap 사용
func flatten() { let arr: [[Int]] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] let numArr = arr.flatMap({ $0 }) print(numArr) } // [1, 2, 3, 4, 5, 6, 7, 8, 9]
Swift
복사
reduce
(1...50).reduce(0) { $0 + $1 }
Swift
복사
joined
배열을 결합시켜서 string으로 return
func flatten() { let arr: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9] let numArr = arr.compactMap({ String($0) }) let result = numArr.joined(separator: " ") print(result) } // 1 2 3 4 5 6 7 8 9
Swift
복사