본문 바로가기

SWIFT64

프로그래머스) signal: illegal instruction (core dumped) 원인과 해결 (Swift 오류) 목차 프로그래머스에서 정답률이 매우 높은 두 정수 사이의 합이라는 문제를 풀다가 갑자기 처음 보는 오류를 발견해서 당황했다. 머리말 오류 발생 메시지 signal: illegal instruction (core dumped) 띠용…? 난이도가 높지 않은 문제인데 왜 틀린 걸까… 여기저기 찾아 봤다. 원인 해당 오류가 발생하는 이유는 크게 두 가지이다. index out of range (활용한 index 범위 연산자가 초과함.) 옵셔널에서 nil 값에 의한 오류 해결책 이 중에서 내 코드의 문제점은 1번의 경우이다. 주어진 데이터에서 index의 범위를 초과했기 때문이다. 내가 사용한 닫힌 범위 연산자(Closed Range Operator)에 대해 좀 더 자세히 알아 보자. 닫힌 범위(Closed Ra.. 2023. 4. 14.
[백준] (Swift) 7785번: 회사에 있는 사람 📌 문제 7785번: 회사에 있는 사람 📌 풀이 Set 자료형과 관련 메서드를 알아야 한다. 역순으로 정렬할 때 sorted 메서드를 활용하면 간단히 풀 수 있다. 📌 정답 코드 import Foundation // 첫째 줄 n 입력 var n: Int = Int(readLine()!)! // 필요한 변수 초기화 var input: [String] = [] var result: [String] = [] var employees = Set() // n개의 줄에서 출입 기록을 차례로 집합에 할당 for _ in 1...n { let input = readLine()!.split(separator: " ").map { String($0) } let name = input[0] let status = input.. 2023. 4. 13.
[Swift] Nil 결합 연산자(Nil-Coalescing Operator) 저번 포스팅에서 Swift의 기본 연산자에 대해 알아 보았다. 기본 연산자는 프로그래밍 언어의 공통적인 부분이라면, 이번 내용은 '옵셔널(optional)'이라는 자료형이 있는 Swift만의 독특한 연산자라 할 수 있다. [Swift] 기본 연산자(Basic Operators) 📌 용어(Terminology) 1. 단항 연산자(Unary Operator) 단일한 항목(single targets)에 작동하는 연산자. 접두사(prefix)와 접미사(postfix)로 나누어짐. var a, b, c -a b c! 2. 이항 연산자(Binary Operator) 2개의 항목(two ta andy-archive.tistory.com 📌 Nil 결합 연산자의 기본 형식 Nil 결합 연산자의 기본 형식은 a ?? b.. 2023. 4. 11.
[백준] (Swift) 14425번: 문자열 집합 📌 문제 14425번: 문자열 집합 📌 풀이 Set 자료형과 관련 메서드를 알면 간단하게 풀 수 있는 문제였다. 질문 처음에는 Set 자료형으로 요소를 추가하는 건 알았지만 아래의 궁금증이 생겼다. Q. 예시의 baekjoononlinejudge과 baekjoon처럼 해당 요소가 정확히 일치하지 않으면 count 하지 않을 수 있나? A. contains() 메서드가 알아서 count 하지 않는다(!) contains()의 예시 코드 var array = ["jellyfish", "cat", "dog", "bird"] var set = Set() for i in 0.. 2023. 4. 11.
[백준] (Swift) 10815번: 숫자 카드 📌 문제 10815번: 숫자 카드 📌 풀이 풀이는 두 가지가 모두 정답으로 나왔다. 이진 탐색 세트(Set) 자료형 (1) 이진 탐색 처음에는 주어진 배열을 선형으로 접근했더니 ‘시간 초과’가 나와서 이진 탐색으로 바꿔서 푸니 바로 정답이 나왔다. (2) 세트(Set) 자료형 이렇게 끝내기는 너무 아쉬워서 다른 자료형으로 풀어 보았는데, Set 자료형으로 풀면 정답이 나온다. for in을 쓸 때 Array의 시간 복잡도는 $O(n)$, Set의 시간 복잡도는 $O(1)$이다. 그 이유를 찾아 보니, Set는 해시 테이블을 이용해 만든 자료구조이기에 선형 탐색을 하지 않는다고 한다. 선형 탐색과 이진 탐색에 대한 간단한 설명은 여기를 클릭! [CS50 2019] (컴퓨팅 사고) 알고리즘 이전 강의에서는 .. 2023. 4. 11.
[Swift] 문자열 리터럴(String Literals) 프로그래밍 언어의 기본 자료형 중 하나인 문자열에 대해 알아 보자. Swift는 문자열과 문자를 별도로 구분하는 언어이다. (아래의 여러 줄 문자열은 루이스 캐럴의 소설 『이상한 나라의 앨리스』(1865) 발췌하여 가져 왔습니다.) 📌 문자열 리터럴(String Literals) 문자열의 리터럴은 쌍따옴표 하나(")를 양끝에 감싸서 데이터를 표현한다. // 타입 추론 형식으로 문자열을 작성할 때 let aString = "This is a string." // 타입 명시로 문자열을 작성할 때 let anotherString: String = "I just wrote my second string." 📌 여러 줄 문자열 리터럴(Multiline String Literals) (1) 쌍따옴표 3개(""")를.. 2023. 4. 8.
[Swift] reversed로 컬렉션 타입의 순서를 뒤집는 뷰 반환하기 프로그래머스에서 자연수를 뒤집어 배열로 만드는 문제를 풀다가 reversed() 메서드를 알게 되었다. 이를 정리해 보기 위해 이번 포스팅을 하게 되었다. 아래의 공식 문서를 참고 했다. reversed() | Apple Developer Documentation 📌 정의 Returns a view presenting the elements of the collection in reverse order. 컬렉션의 요소를 반대 순서로 표시하는 뷰(view)를 반환한다. 여기서 중요한 것은 단순히 반대 순서로 만드는 게 아니라 이를 표시하는 뷰를 반환하는 것이다. 따라서 다시 그 컬렉션을 원하면 메서드를 사용한 이후 형 변환을 해야 한다. 📌 선언 func reversed() -> ReversedCollec.. 2023. 4. 7.
[Swift] 기본 연산자(Basic Operators) 📌 용어(Terminology) 1. 단항 연산자(Unary Operator) 단일한 항목(single targets)에 작동하는 연산자. 접두사(prefix)와 접미사(postfix)로 나누어짐. var a, b, c -a b c! 2. 이항 연산자(Binary Operator) 2개의 항목(two targets)에 작동하는 연산자. 2개의 항목 사이에 위치해야 하므로 모두 삽입사(infix)에 해당함. 3 + 5 4 - 9 3. 삼항 연산자(Ternary Operator) 3개의 항목(three targets)에 작동하는 연산자. 스위프트에서는 '삼항 조건 연산자(ternary conditional operator)'라는 오직 하나의 삼항 연산자만 갖고 있다. a ? b : c // condition.. 2023. 4. 6.
[프로그래머스] (Swift) 정수 제곱근 판별 - Lv.1 📌 문제 코딩테스트 연습 - 정수 제곱근 판별 | 프로그래머스 스쿨 📌 풀이 Swift의 squareRoot() 메서드와 삼항 연산자를 이용해 풀어 보았다. squareRoot() | Apple Developer Documentation 다만, squareRoot()는 Double에 있는 공식 문서여서 형 변환에 유의해야 한다. 문제의 함수의 반환값 또한 Int가 아닌 Int64이니 그에 맞게 형 변환을 하자 📌 코드 func solution(_ n:Int64) -> Int64 { // n의 제곱근을 상수로 할당 let root = Int64(Double(n).squareRoot()) // 제곱근이 실제로 맞으면 원하는 조건의 반환값을, 아니면 -1을 반환 return root * root == n ? .. 2023. 4. 3.
[백준] (Swift) 1850번: 최대공약수 📌 문제 1850번: 최대공약수 📌 풀이 처음에는 입력값이 실제 정수가 아닌 1의 개수라서 이를 정수로 변환하는 함수를 만들었다. 하지만 그렇게 하면 입력값이 클 경우 시간이 너무 오래 걸리는 경우가 생겼다. 몇 번 실제로 값을 계속 넣어 보니 겉으로만 1의 개수이지, 1의 개수들끼리 최대공약수를 구하여 이를 정수로 변환만 하면 된다. 이를 눈치채지 못하면 계속 돌고 돌아 멘붕에 빠질 수 있다. 최대공약수를 구하는데 사용한 유클리드 호제법(Euclidean Algorithm)은 아래의 링크에서 자세히 설명해 두었다. [재귀] 유클리드 호제법과 최대공약수, 최소공배수 [재귀] 유클리드 호제법과 최대공약수, 최소공배수 유클리드 호제법을 배워 보고 재귀적으로(recursively) 구현한 것과 반복적으로(it.. 2023. 4. 3.
반응형