풀이
1. 두 수 중 작은 수를 매번 +1 하며 큰 수와 같아질 때까지 반복문을 돌리는 방법도 있지만, 숫자의 차가 클 경우 비효율적이다.
2. 반복문을 사용하지 않고 바로 계산하는 것이 효율적임.
func solution(_ a:Int, _ b:Int) -> Int64 {
var aa: Int64 = Int64(a)
var bb: Int64 = Int64(b)
if(aa > bb) { swap(&aa, &bb) }
var ans: Int64 = 0
let temp: Int64 = aa + bb
ans = temp * ((bb + 1 - aa) / 2)
if((bb - aa) % 2 == 0) {
ans += (bb + aa) / 2
}
return ans
}
코드 개선
func solution(_ a:Int, _ b:Int) -> Int64 {
var aa: Int64 = Int64(min(a, b))
var bb: Int64 = Int64(max(a, b))
var ans: Int64 = 0
let temp: Int64 = aa + bb
ans = temp * (bb - aa + 1) / 2
return ans
}
코드 개선
func solution(_ a:Int, _ b:Int) -> Int64 {
return Int64(a + b) * Int64(max(a, b) - min(a, b) + 1) / Int64(2)
}
'Study > 알고리즘' 카테고리의 다른 글
[프로그래머스] 42748. K번째 수 (swift) (0) | 2020.07.24 |
---|---|
[프로그래머스] 12915. 문자열 내 마음대로 정렬하기 (swift) (0) | 2020.07.23 |
[프로그래머스] 12903. 가운데 글자 가져오기 (swift) (0) | 2020.07.21 |
MySQL 정리 (0) | 2020.06.04 |
[프로그래머스] 12979. 기지국 설치 (C++) (0) | 2020.05.29 |