전체 글 198

Swift에서 타입 안전성(type safety)은 어떤 방식으로 보장되나요?

타입 안전성 (type safety) 결론부터 말하자면 Swift는 타입 안전성이 보장이 되어 있는 언어이다. Swift는 타입안정성을 추구하기 때문에 코드를 컴파일할 때 타입 확인 작업을 수행하고 잘못된 타입이 있다면 오류를 표시한다. 이는 개발 과정을 통해 오류를 빠르게 확인하고 수정을 가능하게 만들어서 안전성을 보장하게 된다. Swift 언어를 사용하다 보면 나는 타입을 명시해주지 않았는데 잘 돌아가는 경우가 있을 것이다.이것이 가능한 건 Swift가 타입 추론을 지원해 주는 언어이기 때문이다. let num = 3//타입을 명시하지 않았지만 컴파일 시 Int타입으로 추론 let name = "JJ"//타입을 명시하지 않았지만 컴파일 시 String타입으로 추론 위 예시처럼 타입을 명시해 주지 않아..

iOS/Swift 상식 2023.07.23

Optional Chaining과 nil-coalescing operator(??)의 차이점과 사용 시 주의사항은 무엇인가요?

코딩을 하다보면 구조체 내부에서 또다른 인스턴스가 들어오는 상황이 생긴다. 그러다 보면 프로퍼티를 따라서 들어가는 경우가 생기는데 이때 프로퍼티가 옵셔널인 경우 nil인지 아닌지 확인해야하는 경우가 있다. 예시를 보면 쉽게 알 수 있다. □ Optional Chaining 적용 안한 것 func guardJob(owner: Person?) { if let owner = owner { if let home = home { if let `guard` = home.guard { if let guardJob = `guard`.job { print("우리집 경비원의 직업은 \(guardJob)입니다") } else { print("우리집 경비원은 직업이 없어요") } } } } } □ Optional Chaini..

iOS/Swift 상식 2023.06.26

Codable

Codable = Encodable + Decodable Encodable은 data를 Encoder에서 변환해주려는 프로토콜로 바꿔주는 것 Decodable은 data를 원하는 모델로 Decode 해주는 것 Codable은 프로토콜이라서 Struct, enum, class 전부 채택 가능하다. struct User: Codable { enum CodingKeys: String,CodingKey { case id case name case birth case phoneNum = "phone_num" } let id: Int let name: String let birth: String let phoneNum: String } Enum CodingKeys CodingKeys는 json Key에서 사용하는 ..

iOS/Swift 상식 2023.06.26

[백준] 2573 빙산

빙산의 덩어리 개수를 파악하기 위해서 자신 있게 dfs를 이용하여 문제를 풀었지만 결과는 시간초과 ㅜㅜ (dfs 안써..) □ 망한 코드.. ㅎ (잘못 나올 수 도 있어요!) vector input2573(301,vector(301,0)); vector modSea2573(301,vector(301,0)); vector check2573(301,vector(301,false)); int N2573, M2573; bool dfs2573(int x, int y, bool check){ if(x M2573) return false; if(check){ if(modSea2573[x][y] == 0 && input2573[x][y] != 0 && !check2573[x][y]){ int countSea = 0; ..

[백준] 16974 레벨 햄버거

3 번째 예제를 보지 못하고 신나는 마음에 문제를 재귀로 쉽게 풀어내서 이게 실버문제라고..?라는 의문이 드는 순간 무려 4천조나 되는 숫자가 나와서 매우 당황..;; 처음에 신나는 마음에 푼 코드.. 는 정말 단순하게 있는 그대로 구현한 것 같다. 끙끙 헤매다가 결국 인터넷의 힘을 빌릴 수밖에..ㅜ 숫자가 매우 커서 재귀를 무작정 돌리는 경우 시간초과가 나는 것은 무조건이다. 따라서 DP를 이용하여 풀어야 하는데 솔직히 막막하다. 햄버거 재료 개수랑 패티 개수를 저장할 배열을 생성한 후 미리 개수를 저장해 놓는다. 그리고 우리가 구하고 싶은 것은 패티! 의 개수가 중요하니까 모든 코드는 패티의 개수에 맞춰서 짠다. 우선 전체 코드 공개! #include #define fast ios::sync_with..

[백준] 10819 차이를 최대로

문제를 읽고 예제를 봤을 때 왜 62가 나오는지 몰랐다.(하핳) 그래서 문제에서 알려준 식을 가지고 코드로 변환하여 작성했더니 정말 62가 나와서 놀랬다.ㅎ #include using namespace std; int N10819; int maxNum = -INT_MAX; vector input10819; vector check10819(9,false); vector tmp10819; void backback10819(int count){ if(count == N10819){ int sum = 0; for(int i=0; iN10819; for(int i=0;i>a; input10819.push_back(a); } backback10819(0); cout

[백준] 2580 스도쿠

이 문제가 왜 골드 4인지 잘 모르겠다..ㅋ 빈칸에 전부 다 대입을 한 후 반복문을 돌리면서 확인하는 경우의 수는 너무 많이 나오고 시간초과가 발생할 확률이 매우 높다. 따라서 빈칸에 적당한 값을 넣기 전에 같은 행, 열, 블록을 검사한 후 같은 숫자가 없는 경우 대입하는 방법으로 문제를 해결해야 한다. #include using namespace std; vector input2580(10,vector(10,0)); vector zeroPos2580; bool complete2580 = false; bool checkValidSudo(int x, int y){ // 세로 가로줄 검사 for(int i=1; i

[백준] 1987 알파벳

정말 순수하게 알파벳이 지나온 길을 저장한 뒤에 한번 재귀가 돌때마다 반복문을 돌며 저장된 알파벳을 탐색하는 방식으로 풀었다. 그런데 바로 시간초과 ㅜㅜ □ 해결은 됐지만 시간초과가 된 코드 #include using namespace std; int R1987, C1987; vector input1987(21,vector(21,NULL)); vector check1987(21,vector(21,false)); vector doneAlpha1987; int result1987 = 0; bool checkAlphabet1987(char now, int count){ for(int i=0;iR1987>>C1987; for(int i=1;ia; input1987[i][j] = a; } } backback198..

[백준] 1182 부분 수열의 합

부분 수열을 더하면서 입력한 값과 같게 되는 경우의 수를 구하는 문제인데 백트래킹의 기본적인 문제인데 출력값이 자꾸 하나씩 더 나와서 당황했다. 원인은 원하는 값이 0인 경우 count값이 0부터 시작하여 값이 한개 더 추가된다는 것 이였다. 그래서 조건문에서 count가 1부터 통과되록 조건을 추가 시켜서 해결하였다. #include using namespace std; vector input1182(21,0); vector check1182(21,false); int N1182,S1182; int result1182 = 0; void backback1182(int count, int pos, int sum){ if(sum == S1182 && count > 0) result1182 ++; if( co..