HIT해
[Swift] Swift 수학 연산 및 Reduce 본문
728x90
1. 기본 수학 연산
산술 연산
// 기본 연산자
let sum = 5 + 3 // 8
let difference = 10 - 4 // 6
let product = 6 * 7 // 42
let quotient = 20 / 4 // 5
let remainder = 22 % 5 // 2
// 복합 할당 연산자
var number = 5
number += 3 // number = 8
number *= 2 // number = 16
고급 수학 함수
import Foundation
// 거듭제곱과 제곱근
let power = pow(2.0, 3.0) // 8.0 (2의 3승)
let squareRoot = sqrt(16.0) // 4.0
let cubeRoot = cbrt(27.0) // 3.0 (세제곱근)
// 절대값
let absoluteValue = abs(-10) // 10
let doubleAbs = fabs(-10.5) // 10.5
// 반올림 함수들
let rounded = round(3.7) // 4.0
let ceiling = ceil(3.2) // 4.0
let floor = floor(3.8) // 3.0
let truncated = trunc(3.7) // 3.0
최대/최소 및 비교
// 단일 값 비교
let maximum = max(5, 10) // 10
let minimum = min(5, 10) // 5
// 배열에서 최대/최소 찾기
let numbers = [1, 5, 3, 7, 2]
let maxNumber = numbers.max() // Optional(7)
let minNumber = numbers.min() // Optional(1)
2. 삼각함수 및 각도 변환
삼각함수
// 기본 삼각함수
let sineValue = sin(Double.pi / 2) // 1.0
let cosineValue = cos(0) // 1.0
let tangentValue = tan(Double.pi / 4) // 1.0
// 역삼각함수
let arcSine = asin(1.0) // π/2
let arcCosine = acos(1.0) // 0
let arcTangent = atan(1.0) // π/4
각도 변환
// 도(degrees)를 라디안(radians)으로 변환
func degreesToRadians(_ degrees: Double) -> Double {
return degrees * .pi / 180
}
// 라디안을 도로 변환
func radiansToDegrees(_ radians: Double) -> Double {
return radians * 180 / .pi
}
3. 로그 및 지수 함수
로그 함수
// 자연로그 (밑이 e)
let naturalLog = log(2.718281828) // ≈ 1.0
// 밑이 10인 로그
let base10Log = log10(100) // 2.0
// 밑이 2인 로그
let base2Log = log2(8) // 3.0
지수 함수
// e의 거듭제곱
let exponential = exp(1) // ≈ 2.718281828 (e¹)
let exp2Value = exp2(3) // 8.0 (2³)
4. 난수 생성 및 진법 변환
난수 생성
// 정수 난수
let randomInt = Int.random(in: 1...10)
let randomEvenInt = Int.random(in: stride(from: 0, through: 10, by: 2))
// 실수 난수
let randomDouble = Double.random(in: 0.0...1.0)
let randomFloat = Float.random(in: -1.0...1.0)
진법 변환
// 10진수를 다른 진법으로 변환
let binary = String(42, radix: 2) // "101010"
let octal = String(42, radix: 8) // "52"
let hex = String(42, radix: 16) // "2a"
// 다른 진법을 10진수로 변환
let decimalFromBinary = Int("101010", radix: 2) // Optional(42)
let decimalFromHex = Int("2a", radix: 16) // Optional(42)
5. Reduce 활용
기본 축소 연산
let numbers = [1, 2, 3, 4, 5]
// 합계 계산
let sum = numbers.reduce(0, +) // 15
// 곱셈 계산
let product = numbers.reduce(1, *) // 120
// 최대값 찾기
let max = numbers.reduce(Int.min, max) // 5
문자열 처리
let words = ["Swift", "is", "awesome"]
// 문자열 연결
let sentence = words.reduce("") {
$0.isEmpty ? $1 : $0 + " " + $1
}
// "Swift is awesome"
// 문자 개수 세기
let characterCount = words.reduce(0) {
$0 + $1.count
} // 13
복잡한 변환
// 배열을 딕셔너리로 변환
let names = ["Alice", "Bob", "Charlie"]
let lengthDict = names.reduce(into: [:]) { dict, name in
dict[name] = name.count
}
// ["Alice": 5, "Bob": 3, "Charlie": 7]
// 조건부 필터링과 변환
let numbers = [1, 2, 3, 4, 5]
let sumOfSquaresOfEvens = numbers.reduce(0) { sum, num in
num % 2 == 0 ? sum + num * num : sum
}
// 20 (2² + 4²)
중첩 데이터 처리
// 2차원 배열 평탄화
let matrix = [[1, 2], [3, 4], [5, 6]]
let flattened = matrix.reduce([], +)
// [1, 2, 3, 4, 5, 6]
// 중첩 딕셔너리 생성
let data = [(name: "Alice", age: 25), (name: "Bob", age: 30)]
let groupedByAge = data.reduce(into: [:]) { dict, person in
dict[person.age, default: []] += [person.name]
}
// [25: ["Alice"], 30: ["Bob"]]
'Swift > Swift 알고리즘' 카테고리의 다른 글
[Swift] String (0) | 2024.11.02 |
---|---|
[Swift/백준] 가장 긴 증가하는 부분 수열 ( LIS , DP ) (0) | 2024.11.02 |
[Swift/프로그래머스] 여행경로 ( DFS , 딕셔너리 ) (1) | 2024.11.02 |
[Swift/프로그래머스] 섬 연결하기 ( 그리디, MST ) (0) | 2024.11.02 |
[Swift] 크루스칼 알고리즘 ( MST 최소 신장 트리 ) (0) | 2024.11.02 |