반응형
프로그래머스의 두 정수 사이의 합 문제를 swift 언어로 풀면서 나왔던 error입니다.
-- 애러가 나온 해당 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
func solution(_ a:Int, _ b:Int) -> Int64 {
var result: Int = 0
if a > b{
for i in a...b{
result += i
}
}else if a < b{
for i in b...a{
result += i
}
}else{
result = 0
}
return Int64( result )
}
|
cs |
-- 에러 문구
Swift/arm64-apple-ios-simulator.swiftinterface:5883: Fatal error: Range requires lowerBound <= upperBound
에러 문구를 보면 범위의 설정이 잘못되어 나오는 에러인 것으로 보인다.
두 정수 사이의 합을 구하려는 부분에서 a와 b의 대소비교가 정해져 있지 않아 코드를 구현해야하는 문제 였습니다.
-- 원인
다만 if문의 조건을 반대로 넣어 for문을 넣을때 a > b인 경우 for문에 범위를 b...a로 넣었어야 하는 부분이였습니다.
-- 문제 해결 코드1
부분적으로는 쉽게 해결이 가능하다 if문의 조건문을 변경해 주기만 하면 간단히 수정이 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
func solution1(_ a:Int, _ b:Int) -> Int64 {
var result: Int = 0
if a < b{
for i in a...b{
result += i
}
}else if a > b{
for i in b...a{
result += i
}
}else{
result = 0
}
return Int64( result )
}
|
cs |
기존의 소스를 수정한 방향이다.
-- 문제 해결 코드 2
코드2의 경우에는 무슨 문제인지 찾지 못해서 다른 방법으로 구현했던 방법이다.
문제 해결을 하기위하여 이런 코드를 간결하게 바꾼 방법이라고 생각하여 결과는 같지만 정확히는 에러의 해결방법이 되지는 못 할 수 있다.
1
2
3
4
5
6
7
8
9
10
|
func solution(_ a:Int, _ b:Int) -> Int64 {
var result: Int = 0
let lowerBound = min(a, b)
let upperBound = max(a, b)
for i in lowerBound...upperBound{
result += i
}
return Int64( result )
}
|
cs |
해당 방법의 경우에는 min과 max함수를 사용하여 if문 자체를 없애버림으로써 애러가 나지 않도록 수정한 부분이다.
반응형