TIL

[240311] 최대공약수와 최소공배수/진수변환 radix/일급객체

2024. 3. 11. 09:42

1. 최대공약수는 유클리드 호제법을 통해 구할 수 있다. a를 b로 나눴을 때 나머지를 r이라고 하면,

gcd(a, b) == gcd(b, r) 이다. r이 0이 될 때까지 재귀함수를 실행한다.

최소공배수는 a * b = 최대공약수 * 최소공배수 임을 이용하여 구한다.

func gcd(_ a: Int, _ b: Int) -> Int {
	return b == 0 ? a : gcd(b, a % b)
}

func lcm(_ a: Int, _ b: Int) -> Int {
	return a * b / gcd(a, b)
}

 

 

2. radix를 이용하여 10진수를 n진수, n진수를 10진수로 바꿀 수 있다.

// Int형 10진수를 2진수의 String으로 변환
let decimalToBinary = String(10, radix: 2)
// 2진수 문자열을 Int형 10진수로 변환, 변환되지 않을 경우 nil을 반환할 수 있으므로 언래핑
let BinaryToDecimal = Int(decimalToBinary, radix: 2)!

 

 

3. 일급객체(First Class Citizen)

클로저를 공부하면서 스위프트는 함수를 일급객체 취급한다는 것을 알게됐다. 그래서 일급객체가 뭐야

일급객체는 1) 변수에 할당 가능하고 2) 함수의 파라미터로 전달 가능하며 3) 함수의 반환값으로 사용 가능한 것이다.

즉 변수나 상수처럼 사용 가능한 것!