문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 3085 사탕 게임 제출 언어: Swift 알고리즘 분류: 구현 브루스포스 알고리즘 풀이 브루스 포스 알고리즘 Brute(무식한) Force 알고리즘 : 모든 가능한 경우의 수를 모두 탐색하며 요구 조건에 충족하는 결과만을 가져옴 완전 탐색 알고리즘 주어진 문제를 선형 구조로 구조화 한 후 반복문으로 원하고자 하는 해를 구할 때까지 탐색 BFS(너비 우선 탐색)도 브루스 포스 방식의 완전 탐색 알고리즘이다 알고리즘 설계 입력받은 NxN크기의 사탕들을 (N+1)*(N+1)크기의 배열에 넣어준다 -> 배열의 인덱스 문제를 최소화하기 위해서 사탕 게임을 진행하기 전의 상태가 연속한 사탕 부분의 최대값일 수 있으므로 현재 상태에서의 연속된 사탕의 최대 개수를..
자연어 처리 (NLP) 기술을 접목한 iOS앱 개인 프로젝트를 구상하는 도중 요즘 핫한 chatGPT가 떠올랐다! chatGPT를 이용한 서비스를 구현하기 위해 chatGPT API를 사용해보려고 한다. chatGPT에게 질문을 던지고 대답을 받는 작업을 해보자 1. OpenAI API key 발급받기 아래 링크 의 우측 상단의 View API keys 메뉴로 들어가API key를 발급받는다. OpenAI API An API for accessing new AI models developed by OpenAI platform.openai.com OpenAI API key는 다시 볼 수 없으므로 잘 백업 해놓자! 2. Swift Package 추가 이제 Swift로 ChatGPT를 사용하기 위해 Packa..
문제 정보 문제 출처: 백준 온라인 저지 문제 링크: 1806 부분합 제출 언어: Swift 알고리즘 분류: 누적 합 두 포인터 풀이 투포인터 알고리즘 1차원 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘이다 정렬되어 있는 두 list의 합집합에서 사용 (merge sort의 기초) 포인터는 2개로, start-end로 설정하며 초기에는 stard=end=0 이고 항상 start 현재 result값과 end - start(현재 원소의 최소 길이)중 작은 값으로 초기화 temp값(현재 원소의 부분 합)에서 현재 원소 값을 빼준다 start += 1을 해준다 (앞 포인터를 오른쪽으로 한 칸 이동시킨다) case2. 끝 포인터가 배열의 끝에 도달할 경우 while문을 끝..
이전 값 타입과 참조 타입 글에서 struct보다는 class를 사용하라는 말을 했지만, 특정 프로토콜을 채택해야 하는 상황 등 분명히 class를 사용해야만 하는 경우가 발생한다 앱을 모델링할 경우에 이러한 class 성능을 향상시키기 위한 노력이 반드시 필요하다 지금부터 class의 성능을 향상시키는 방법을 알아보자~ 😎 Static Dispatch vs Dynamic Dispatch 함수를 호출하는 방식인 Static Dispatch와 Dynamic Dispatch을 이용하여 class의 성능을 향상시킬 수 있다. 이러한 함수 호출 방식들에 대해 살펴보자 Dynamic Dispatch Swift에서 class는 상속 기능을 지원하고, 상속한 하위 클래스에서 상위 클래스의 메서드를 오버라이딩해서 사..
self와 Self 비교 생성자를 다루면서 자주 사용했었던 self와 간간히 나오는 Self의 차이점을 비교해보겠다 self self는 인스턴스를 가리킨다!! self는 자기 자신의 인스턴스를 가리킨다고 한다 다양한 예시를 보며 self가 쓰이는 경우를 알아보자 생성자 내부에서 사용 클래스 or 구조체의 생성자에서 해당 저장 프로퍼티를 초기화할 경우 self.저장 프로퍼티 와 같이 self 키워드로 자기 자신의 인스턴스의 저장 프로퍼티에 접근한다 class Person { var name: String init(name: String) { self.name = name } } var p = Person(name:"sumin") 클래스 내부에서 저장 프로퍼티에 접근하는 경우 사용 class Person {..
iOS 앱 샌드박스(App SandBox) 샌드박스 란 어린아이를 보호하기 위해 모래통에서만 놀도록 하는데서 유래한 접근 보안 모델 iOS 에서는 하나의 앱마다 sandbox를 두고 공유되지 않도록 하여 접근에 대해 보호함 sandbox 내의 파일만 정보를 주고 받을 수 있도록 함 전략 앱이 시스템과 상호 작용하는 방식을 설명할 수 있습니다. 시스템에서 작업을 완료하는 데 필요한 접근권한을 앱에 "부여"하는 것이죠. 열기 및 저장, 드래그 앤 드롭 및 친숙한 사용자 상호 작용을 통해 앱에 투명하게 추가 접근 권한을 부여할 수 있습니다. 샌드박스가 없을 경우 → 앱에서 사용자의 모든 데이터에 접근 가능 & 모든 시스템 자원이 앱에 접근 가능 이러한 보안 문제로 인해 iOS 정책은 사용자 앱에 모든 리소스들..
타입 캐스팅 is 연산자(type check operator) 인스턴스의 타입을 검사함 인스턴스 is 타입 형태로 사용 (이항 연산자) 상속은 저장속성 확장 개념이기 때문에 하위 클래스가 상위 클래스의 타입일 수는 있지만, 상위 클래스가 하위 클래스 타입일 수는 없다. (메모리 관점에서 하위 클래스의 인스턴스는 상위 클래스의 속성을 가지고 있지만, 상위 클래스는 하위 클래스의 속성을 가지고 있지 않다.) Person 인스턴스 is Undergraduate(false) Undergraduate인스턴스 is Person (true) class Person { var id = 0 var name = "데이지" var email = "abc@naver.com" } // Person 클래스 상속 class Stu..
값 타입과 참조 타입 값 타입(Value Type) 참조 타입(Reference Type) 구조체, 열거형, 튜플 클래스, 클로저 값 타입 구조체, 열거형, 튜플 타입 자체는 데이터 메모리 영역 에서 생성된다 스택 메모리 영역 에 인스턴스가 생성된다 인스턴스 복사시) 새로운 값이 할당되어 스택 메모리 영역에 쌓인다 그러므로 복사본의 내부 프로퍼티를 변경하면 그 복사본의 값이 변하고 원본 값은 변하지 않는다 인스턴스 let으로 선언시) 인스턴스의 내부 프로퍼티들이 var로 선언되었더라도 그 값을 변경할 수 없게된다 참조 타입 클래스나 클로저 타입 자체도 값 타입과 마찬가지로 데이터 메모리 영역 에서 생성된다 힙 메모리 영역 에 생성된 인스턴스의 데이터를 저장한다 스택 메모리 영역 에서는 힙 메모리 영역 에..