목차
프로그래머스에서 정답률이 매우 높은 두 정수 사이의 합이라는 문제를 풀다가 갑자기 처음 보는 오류를 발견해서 당황했다.
머리말
오류 발생
메시지
signal: illegal instruction (core dumped)
띠용…?
난이도가 높지 않은 문제인데 왜 틀린 걸까… 여기저기 찾아 봤다.
원인
해당 오류가 발생하는 이유는 크게 두 가지이다.
- index out of range (활용한 index 범위 연산자가 초과함.)
- 옵셔널에서 nil 값에 의한 오류
해결책
이 중에서 내 코드의 문제점은 1번의 경우이다. 주어진 데이터에서 index의 범위를 초과했기 때문이다. 내가 사용한 닫힌 범위 연산자(Closed Range Operator)에 대해 좀 더 자세히 알아 보자.
닫힌 범위(Closed Range) 연산자
Swift Documentation
닫힌 범위 연산자를 공식 문서에서 찾아 보니 a...b에서 a는 b보다 절대로 크면 안된다는 조건이 있었다. 이걸 몰랐네
Closed Range Operator
The closed range operator(a...b) defines a range that runs from a to b, and includes the values a and b. The value of a must not be greater than b.
Closed Range Operator - Basic Operators | Documentation
닫힌 범위 연산자
닫힌 범위 연산자(a..b)는 a에서부터 b까지의 실행 범위를 정의하며, a와 b의 값을 포함한다. a의 값은 b의 값보다 절대로 크면 안된다.
닫힌 범위 연산자 - 기본 연산자 - Swift
오류 코드
프로그래머스의 문제를 잘 읽어 보면 "a와 b의 대소관계는 정해져있지 않습니다."라는 조건이 있다.
하지만 내 코드는 이를 고려하지 않고 무작정 a가 b보다 작은 범위 연산자를 사용했다.
func solution(_ a:Int, _ b:Int) -> Int64 {
var sum: Int = 0
for i in a...b {
sum += i
}
return Int64(sum)
}
수정 코드
오류 코드를 반영하여 a와 b의 대소 관계에 따라 조건을 나누었다.
func solution(_ a:Int, _ b:Int) -> Int64 {
var sum: Int = 0
if a < b {
for i in a...b {
sum += i
}
} else {
for i in b...a {
sum += i
}
}
return Int64(sum)
}
해결
이미지
꼬리말
참고 자료
Swift Documentation
Closed Range Operator - Basic Operators | Documentation
- 작성일 2023-04-14
- 수정일 2023-12-26
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (Swift) 문자열 내림차순으로 배치하기 - Lv.1 (0) | 2023.04.20 |
---|---|
[프로그래머스] (Swift) 제일 작은 수 제거하기 - Lv.1 (0) | 2023.04.18 |
[프로그래머스] (Swift) 정수 제곱근 판별 - Lv.1 (0) | 2023.04.03 |
프로그래머스) 분수의 덧셈 (Swift) (0) | 2023.03.27 |
프로그래머스) sublime 자주 쓰는 단축키 (Mac) (0) | 2023.03.27 |
댓글