본문 바로가기
코딩 테스트/프로그래머스

프로그래머스) signal: illegal instruction (core dumped) 원인과 해결 (Swift 오류)

by Dev.Andy 2023. 4. 14.

목차

    프로그래머스에서 Swift 코드 실행 시 오류 메시지 "signal: illegal instruction (core dumped)"
    코드 실행 시 오류 메시지 이미지

    프로그래머스에서 정답률이 매우 높은 두 정수 사이의 합이라는 문제를 풀다가 갑자기 처음 보는 오류를 발견해서 당황했다.

    머리말

    오류 발생

    메시지

    signal: illegal instruction (core dumped)

    띠용…?

    난이도가 높지 않은 문제인데 왜 틀린 걸까… 여기저기 찾아 봤다.

    원인

    해당 오류가 발생하는 이유는 크게 두 가지이다.

    1. index out of range (활용한 index 범위 연산자가 초과함.)
    2. 옵셔널에서 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 오류 해결
    오류 해결

    꼬리말

    참고 자료

    Swift Documentation

    Closed Range Operator - Basic Operators | Documentation

    • 작성일 2023-04-14
    • 수정일 2023-12-26

    댓글