본문 바로가기

SWIFT64

[프로그래머스] (Swift) 시저 암호 - Lv.1 코딩테스트 연습 - 시저 암호 | 프로그래머스 스쿨 풀이 유니코드 스칼라 값과 정수 값을 오가는 것에 애를 많이 먹었다. 공식 문서를 찾아 보려 해도 키워드로 UnicodeScalar, unicodeScalar를 찾으면 문서가 너무 많이 나오고 설명이나 예시 코드가 많지 않아서 애를 많이 먹었다.🥲 결괏값을 빈 문자열로 초기화 공백인 경우 공백을 결괏값에 더하고 continue한다. 다음에는 간격을 더한 알파벳 값이 끝 값(z, Z)을 넘어 초과할 경우 이를 바꿔줘야 하는데, 이게 좀 까다롭다. 초과하지 않는 경우에는 단순히 간격을 더한 값을 결괏값에 더한다. 코드 func solution(_ s:String, _ n:Int) -> String { var result = "" // 문자열의 유니코드 스칼.. 2023. 5. 2.
[프로그래머스] (Swift) 다음 큰 숫자 - Lv.2 코딩테스트 연습 - 다음 큰 숫자 | 프로그래머스 스쿨 📌 풀이 풀이 순서 우선 주어진 매개변수를 이진수의 문자열로 변환한다. 결괏값을 n으로 초기화한다. 십진수를 이진수로 변환하여 1의 개수를 세는 함수를 만든다 먼저 결괏값을 1 증가시켜 다음 수로 만든다. 기존의 n 값과 4번의 결괏값으로 3번의 함수를 써서 개수가 같을 때까지 무한 루프를 반복한다. 5번에서 탈출한 결괏값을 출력한다. 예외 조건 위의 풀이 순서로 하니 테스트 케이스 딱 하나가 시간 초과가 떴다. 아니 무슨... 왜... 혹시나 예제의 데이터처럼 이진수의 숫자가 모두 1인 수는 다음 숫자로 변환하는데 시간이 많이 걸릴까하는 생각이 들었다. 이진수로 변환했을 때 숫자가 모두 1인 예외 조건 맨 왼쪽의 1을 기준으로 바로 오른쪽에 0을 .. 2023. 5. 1.
[백준] (Swift) N과 M (2) 15650번: N과 M (2) 📌 풀이 중복되지 않아야 하는 수열이므로 조합을 구현하는 문제이다. 그렇다면 조합을 어떻게 구현할까? 바로 백트래킹 알고리즘으로 구현하면 된다. 백트래킹(Backtracking) - DFS로 구현 1. 배열 2개를 만든다. 백트래킹의 진행 과정에 대한 배열 `sequence` 노드의 방문 여부에 대한 배열 `visited` 2. DFS 함수를 정의하여, Base Case와 Recursive Steps에 대한 알고리즘을 세운다. Base Case: 깊이의 끝에 도달했을 때 여태 쌓인 진행 과정을 원하는 형식으로 변환하여 출력 Recursive Steps: `N`만큼 반복하되, 방문하지 않은 노드이면 방문 처리를 하고 다음 노드에 대한 재귀함수를 호출한다. (조건문에 도달하지 .. 2023. 4. 30.
[Swift] "~= " 연산자 함수로 패턴 매칭 확인하기 Xcode에서 SubString에 대한 Definition을 찾던 중 신기한 연산자(!)를 발견했다. 여기서 ~=가 연산자인 것 같은데 뭔지 궁금해서 블로그를 작성하게 되었다. 📌 애플 개발자 공식 문서 ~=(::) | Apple Developer Documentation 선언 ~= 연산자는 pattern과 bound를 매개변수로 받고 부울(Bool)을 반환하는 함수이다. static func ~= (pattern: Self, value: Self.Bound) -> Bool 매개변수 pattern → 어떠한 범위(a range) bound → 패턴에 대응하는 값(a value to match against pattern) 논의 You can use the pattern-matching operator (.. 2023. 4. 26.
[Swift] (알다가도 모를) 문자열의 접근 문자열에 대한 알고리즘 문제를 Swift로 풀어보면서 Swift에서 문자열의 접근이 되게 까다롭다는 생각이 들었다. Python에서는 문자열도 배열처럼 대괄호를 통한 인덱스 접근이 곧바로 되지만, Swift는 그렇지 않기 때문이다. 따라서 다시 문자열 접근을 하는 상황이 생겼을 때 처음보다 덜 헤매기 위해 이번 포스팅을 쓰게 되었다. 문자열 접근에 대해 복습도 할 겸 이를 정리하고 싶었다. 📌 Swift에서 배열과 문자열의 인덱스 접근 인덱스 접근의 차이점 배열에서는 대괄호[]를 사용하여 인덱스 접근이 손쉽게 가능하다. 이에 반해 문자열은 .index를 메서드를 쓰는 것도 모자라서, startIndex/endIndex라는 메서드와 offsetBy라는 매개변수 이름까지 쓰면서 접근해야 한다. 이 뭔… 예시.. 2023. 4. 25.
[Swift] 문자열은 참조 타입이 아닌 값 타입이다? 📌 문자열의 타입은 값 타입(Value Type) Xcode에서 String의 Definition 검색 Xcode에서 String을 입력하고 커맨드(command) 키를 누른 채로 String을 눌러 보자. Swift에서 문자열은 구조체이다. 따라서 문자열은 값 타입이다. String이 구조체(struct)로 구현되어 있는 것을 알 수 있다. 아직 블로그에서 다루지는 않았지만 Swift에서 구조체는 값 타입이다. 따라서 String은 값 타입(value type)이다. 값 타입의 특징 - 복사본의 전달/할당 값 타입의 특성 상, 문자열 값을 함수/메서드에 전달할 때나 상수/변수에 할당할 때 그 값은 복사되어 복사된 값이 전달/할당 된다. 전달/할당 된 복사본의 문자열은 원본의 문자열을 수정한다고 해서 복.. 2023. 4. 24.
[Swift] 배열과 튜플의 차이점 면접 질문 중 하나인 '배열과 튜플의 차이점을 말해보세요.' 대비하여 정리해 보았다. 나아가 차이점에 대한 피드백을 받아서 수정을 하게 되었다. 📌 코드 예시 Array var names = ["Andy", "Lucas", "Ellie", "Nora"] print(names) // ["Andy", "Lucas", "Ellie", "Nora"] print(names[2]) // Ellie Tuple let aPerson = (name: "Andy", age: 20) print(aPerson.name) // Andy print(aPerson.1) // 20 📌 차이점 - 두 가지 타입에 관하여 Swift의 타입은 크게 명명된 타입(named type)과 복합 타입(compound type)으로 나누어 볼 수.. 2023. 4. 24.
[SwiftUI] OT + 자료 모음 아직 블로그에는 포스팅을 하지 않았지만 전체적으로 Swift 문법을 한번 둘러 보았다. 문법을 배우는 족족 포스팅을 하고 싶지만 이해가 되지 않는 부분이 많기도 하고 작성하는데 시간이 상당히 소요되어 미루는 일이 허다했다. 여하간 문법을 한번 훑어 보았으니 본격적으로 프레임워크를 공부하고 싶어서 SwiftUI를 택했다. UIKit을 할지 SwiftUI를 할지 고민을 많이 했지만, 여러 이유로 SwiftUI를 골랐다. 이미 진행 중인 프로젝트를 합류하고 싶어서 들어가 보니, SwiftUI로 설계한 프로젝트였다. UIKit보다는 SwiftUI의 난이도가 비교적 쉽다고 해서 먼저 시작해 보기로 했다. 📌 Swift Tutorial 자료 기본적인 학습을 중심으로 튜토리얼 자료를 모아 봤다. YouTube (1).. 2023. 4. 23.
[프로그래머스] (Swift) 문자열 내림차순으로 배치하기 - Lv.1 📌 문제 코딩테스트 연습 - 문자열 내림차순으로 배치하기 | 프로그래머스 스쿨 📌 풀이 (1) 아스키 값으로 변환하기 아스키 값으로 변환하고 내림차순으로 정렬한 다음 다시 문자열로 변환하는 방법이 있다. 문자열을 한 글자씩 아스키 값(8비트)으로 변환하는 메서드 asciiValue()를 사용한다. 내림차순으로 정렬한다. UnicodeScalar()로 아스키 값을 다시 문자열로 변환하여 한 글자씩 연결한다. (2) sorted() 메서드 이용하기 정말 허무하게도 sorted()와 클로저를 활용하면 한 줄로 표현이 가능하다. 문자열도 정렬이 바로 가능한 줄 몰랐다... 이게 돼? 단, 메서드를 사용하면 Array 형태인데, 이를 다시 형 변환하여 String으로 바꿔주기만 하면 된다. sorted()로 내림.. 2023. 4. 20.
[프로그래머스] (Swift) 제일 작은 수 제거하기 - Lv.1 📌 문제 코딩테스트 연습 - 제일 작은 수 제거하기 | 프로그래머스 스쿨 📌 풀이 (1) 반복문과 인덱스로 풀기 반복문을 통해 인덱스를 접근하여 최솟값을 갱신해 나가면 된다. 단, 최솟값을 찾기 위해 인접한 두 인덱스를 비교하기 해야 하기 떄문에, 인덱스의 범위 설정에 주의를 기울여야 한다. (1) Swift 메서드 활용 Swift의 메서드를 활용하여 손쉽게 구할 수도 있다. min()로 최솟값을 구하고 filter() 또는 removeAll()로 특정 조건을 만족시키도록 하면 된다. 📌 코드 1 - 반복문과 인덱스만으로 구하기 func solution(_ arr:[Int]) -> [Int] { // 배열의 길이가 1 이하일 경우 결괏값에 [-1] 할당 if arr.count 2023. 4. 18.
반응형