본문 바로가기

전체 글

(207)
BST (이진탐색트리) - 개념 이번 글에서는 자료구조를 공부할 때 볼 수 있는 이진트리 구조에 대해서 알아보도록 하겠습니다. 자료구조뿐 아니라 알고리즘을 공부할 때도 많이 볼 수 있죠? Tree 노드와 브랜치를 이용해서 사이클을 이루지 않도록 구성한 데이터 구조입니다. 노드 데이터 + 다음 데이터의 주소 값을 갖고 있는 형태 연결 리스트의 구조로 이루어져 있을 때 볼 수 있는 데이터의 형태 *단방향일 경우 데이터의 주소 값이 next만 / 양방향일 경우 prev, next 모두 갖고 있습니다. 트리 >> 트리도 이런 노드를 사용한 데이터 구조이기 때문에 트리 또한, 데이터와 다음 데이터의 주소 값을 갖고 있는 형태입니다. 그러나 노드와 다른점은? 데이터들 간의 연결 고리 모양이 다릅니다. 위에서 아래로 내려오는 구조를 갖고 있으며 브..
알고리즘에 많이 사용되는 Swift Basic 알고리즘을 스위프트로 풀기로 다짐하고 한 문제 풀어보았는데.. 생각보다 문법이 바로 생각나지 않아서 조금 충격 먹고 정리해보는 알고리즘 용 스위프트 문법 정리를 해봅시다!! 🤔 (이게 다 아닐 수도 있고 완전 100% 정답이 아닐 수 있습니다. 만약 잘못된 부분이 있다면 알려주세요.) 키보드 입력 받기 먼저 가장 중요한 입력값 받기 (이 부분은 사실 생략 가능할지도) let input = readLine() readLine()의 반환 값은 Optional String입니다. 강제 언래핑도 가능하지만, if let으로 옵셔널 하는 것이.. 더 좋은 것 같은 느낌이 드네요.. (논리적인 이유는 모르겠습니다.) 키보드로 입력받은 값을 공백으로 구분하기 예를 들어 입력 값이 1 2 3 4 일 경우 바로 inpu..
Type Casting Type Casting 타입 캐스팅은 인스턴스의 타입을 확인하거나, 해당 인스턴스를 슈퍼 클래스 또는 하위 클래스로 취급하는 방법입니다. Swift에서 타입 캐스팅은 "is" 또는 "as" 연산자로 구현하며, 타입 캐스팅을 사용하여 타입이 프로토콜에 적합한지 여부도 확인할 수 있습니다. is : Checking Type 표현식 is Type 타입을 체크하는 연산자로 런타임 시점에 실제 체크가 이루어집니다. 표현식이 Type과 동일거나, 서브 클래스라면 true이고 이 외의 경우에는 false입니다. 🤔 서브 클래스인 경우에도 true를 반환한다고? class Human { let name: String init(name: String) { self.name = name } } class Sokyte: H..
시간 복잡도 (+빅오 표기법) / 공간 복잡도 알고리즘을 공부했다면 한 번쯤 들어본 개념이 바로 시간/공간 복잡도, 그리고 빅오 표기법.. 이런 거 들어보셨을 겁니다. 이 개념이 도대체 무엇인지? 그리고 이걸 고려해서 어떻게 알고리즘 문제를 풀어야 할지 생각해봅시다!! 시간 복잡도 시간 복잡도 개념은 알고리즘의 실행 속도를 의미합니다. 알고리즘 문제의 경우, 결국 하나의 결괏값을 도출하는 코드를 작성하는 작업입니다. 하나의 문제에 대해서 (예를 들어 1에서 10까지 계산하는 것에 있어서 1부터 10까지 반복문을 통해서 계산할 수 있고 / 수식을 사용해서 계산할 수 있습니다. 이외에도 다양한 방법이 있겠죠?) 여러 가지 코드를 이용해서 풀 수 있습니다. 이때, 방법은 여러 가지라고 해도 가장 실행 속도가 적은 최적의 코드가 있습니다. 그리고 결국 이것..
Swift Algorithm 스위프트로 알고리즘을 공부하기로 마음을 먹었습니다. 근데 이제 환경을 어떻게 해야 하는가? 에 대한 의문이 들어 구글링을 해본 결과 playground에서는 입력값을 받지 못해서 입력을 받고 싶다면, actual application인 Command Line Tool을 이용해야 한다고 합니다. 🤔 왜 playground는 안되는건데? 플레이그라운드는 샌드박스이므로 input이 없습니다. *샌드박스 : 외부로부터 들어온 프로그램이 보호된 영역에서 동작하도록 해서 시스템이 안 좋게 조작되는 것을 막는 보안 형태를 취하는 프로그램입니다. Command Line Tool 그렇다면 Command Line Tool을 어떻게 사용하는지 알아보도록 하겠습니다! 1. 먼저, 엑스 코드를 실행합니다. 2. macOS >>..
ClipsToBounds vs MasksToBounds UI 요소를 둥글게 만들고 싶을 때, 다음과 같은 코드를 작성해서 곡률 값을 설정합니다. myView.layer.cornerRadius = 10 위의 코드에서는 View에 대한 곡률 값을 설정했는데, UIComponent라면 모든 경우에 대해서 위와 같이 곡률 값을 설정할 수 있습니다. 예를 들어서 UIButton, UITextView, UITextField 등.. 그리고 만약, 구글링을 해서 둥글게 만들고자 했다면, 위의 코드와 같이 나오는 코드가 있을 것입니다. myView.clipsToBounds = true 이런 코드, 또는 myView.layer.masksToBounds = false 이와 같은 코드를 cornerRadius 값과 함께 작성하는 것을 볼 수 있습니다. 당장 위의 코드들을 작성하지..
Concurrency Programming - Intro 오늘은 Concurrency Programming에 대해서 알아보겠습니다. 애플 공식 문서를 통해서 알아보도록 할게요 !! 원문은 을 참고해주세요. 😈 원문에 들어가기 전, 프로세스와 쓰레드에 대한 개념을 정리하고 가도록 하겠습니다. 프로세스 프로세스란, 운영체제로부터 시스템 자원을 할당 받는 작업의 단위를 말합니다. 프로세스들은 각각의 독립된 메모리 영역을 할당 받습니다. 따라서, 프로세스들끼리는 서로의 변수, 자료구조에 절대 접근할 수 없습니다. -> 만약, 서로 다른 프로세스가 각 프로세스의 자원에 접근하려고 한다면? 프로세스 간의 통신 (= 파일, 소켓) 등을 해야합니다. 멀티 프로세스 위에서 말한 프로세스가 다수로 구성되는 것을 말합니다. 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로..