- [ 코딩테스트/백준 ][백준/BOJ] 1987번 알파벳 (Swift 스위프트)2024-08-11 18:38:17문제 난이도: 골드 4 사용 알고리즘: DFS, 백트래킹 Set을 통해 한번 방문한 알파벳을 저장해놨다.Set은 중복값이 없기 때문에 이럴 때 유용한 것 같다. 아무튼 코드 자체는 기존 dfs와 다를게 없지만, visited.remove를 통해서 방문했던 곳은 다시 삭제해주는 코드로 짜주었다.방문한 알파벳을 지워주지 않으면, direction의 순서에 따라서 먼저 들어간 곳에 따라서 최대치가 바뀌기 때문에 모든 경로를 파악하여 맥스값을 프린트해주는 방법밖에 없었다.import Foundationlet rc = readLine()!.split(separator: " ").map { Int($0)! }let r = rc[0]let c = rc[1]var map: [[String]] = []var visite..
- [ 자료구조 ][선형 자료구조] 링크드 리스트2024-08-10 13:47:03링크드 리스트란? 데이터를 순차적으로 저장하는 선형 자료구조 중 하나이다.링크드 리스트의 요소는 노드(node) 형태로 존재하는데, node 안에는 데이터와 다음 노드의 메모리 위치를 가리키는 포인터로 이루어져 있다. 주요 특징연속적이지 않은 메모리 주소 링크드 리스트의 요소인 노드는 다시 두가지 부분으로 구성된다.- 데이터(Data): 노드가 저장하는 실제 데이터- 다음 노드(next node): 다음 노드의 메모리 위치를 참조하는 포인터 이렇게 구성 된 이유는 일반 배열의 경우 연속된 메모리 주소를 가지기 때문에, 삽입과 삭제시 O(n)의 시간복잡도를 가지게 된다.하지만 링크드 리스트의 경우 삽입/삭제시에도 가리키는 다음 주소만을 추가/수정해주면 되기 때문에 삽입/삭제 자체만으로는 O(1)의 시간복잡..
- [ UIKit ][UIKit] LayoutSubivews2024-08-08 22:08:03개발을 하다보면, View의 너비나 높이를 알고 싶어도 ViewDidAppear 이 후에나 확인이 가능하다.그러다 layoutSubviews 메서드 내부에서는 언제든 너비나 높이를 확인할 수 있어서 자주 사용하고 있었다. layoutSubviews가 정확히 언제 호출되고 무슨 역할인지 알아보려 한다. LayoutSubviews란?layoutSubviews 메서드는 UIView의 서브뷰들의 배치와 크기가 어떻게 조정될지 결정한다. 자동 호출 시점- View의 Frame 또는 Bounds가 변경될 때- 서브뷰가 추가 또는 삭제 될 때 - 뷰가 처음 화면에 표시될 때 직접적인 호출을 하지 않아도 됨 이처럼 아직 view가 나타나지 않은 viewWillAppear 시점과 view가 나타났음을 알려주는 viewD..
- [ 알고리즘 ][알고리즘] 에스토스테네스의 체 (소수 판별 알고리즘)2024-08-08 16:12:47에스토스테네스의 체? 소수를 찾기 위한 고전적인 알고리즘으로일반적으로 수를 하나씩 체크하며 소수를 판별하는 것은 비효율적이기 때문에 에스토스테네스의 체 알고리즘을 사용하면 좋다. 원리 [1 ... 50]까지 존재한다고 가정하였을 때동일한 크기의 Bool 타입의 true로 가득 찬 배열을 생성한다. [1 ... 50]* 지워준다 == false로 변환여기서 2부터 배수를 지워준다. 이 후 다음 3의 배수를 지워준다. 4의 배수는 이미 2의 배수에서 지워졌다이렇게 계속 배수를 지워주는데, 언제까지 지워주는지가 중요할 것이다.50의 경우 제곱근이 7.0****이 나오게 된다. 이때 50보다 작은 수 중 소수가 아닌(m)은 m = a * b가 된다. (a 이때 a는 무조건 50의 제곱근 7.0*****보다 작게..
- [ 자료구조 ][선형 자료구조] 배열(선형 리스트)2024-08-08 15:36:39배열이란?선형 자료구조 중 선형 리스트에 해당하며,Swift에서는 표준 라이브러리가 제공하는 가장 기본적인 선형 자료구조이다. 주요 특징연속된 메모리 주소 배열은 모든 요소가 연속된 메모리 주소를 가지게 된다.같은 선형 자료구조이지만, 랜덤한 메모리 주소를 가지는 링크드 리스트와는 차이가 있다. 이러한 특징으로 인하여, 인덱스를 통한 임의 접근이 가능하며, 시간 복잡도는 O(1)를 가진다. 시간 복잡도임의 접근: O(1)임의 접근한 요소의 메모리 주소 = 시작 메모리 주소 + (인덱스 넘버 * 타입의 메모리 크기) 삽입/삭제 (배열 끝): O(1)마지막 배열에 추가/삭제 삽입/삭제 (배열 중간): O(n)중간에 삽입/삭제를 통해 그 뒤에 있는 요소들의 메모리 위치가 모두 변경
- [ 자료구조 ][자료구조] 선형 자료구조2024-08-08 15:15:44선형 자료구조(Linear Data Structure)란? 데이터의 요소들이 순차적으로 나열된 구조를 말한다.해당 구조에서는 요소들이 연속적으로 연결되어 있기 때문에, 순서대로 접근하여 탐색이 가능하다. 선형 자료구조로는 리스트, 스택, 큐, 데크(덱)가 존재한다. 이때 리스트 다시 선형 리스트(배열)와 링크드 리스트로 나뉜다. 주요 특징?1. 순차적 배치데이터의 요소들이 순차적으로 고유의 순서를 가지게 된다. 2. 단일 경로데이터는 이전 데이터와 다음 데이터와만 연결된다. 3. 연속된 메모리 주소Swift에서 스택, 큐, 데크는 배열 또는 링크드 리스트로 구현이 가능하다. 배열로 구현하게 된다면, 각 요소는 연속된 메모리 위치를 가지게 된다. 링크드 리스트로 구현하게 된다면, 각 요소는 비연속적인..
- [ 코딩테스트/백준 ][백준/BOJ] 10026번 적록색약 (Swift 스위프트)2024-08-08 14:24:40문제 난이도: 골드 5 사용 알고리즘: DFS 처음 제시한 맵과 적록색약 맵 두 개를 만들었다. 각 맵은 아래와 같이 만들어진다. map =[["R", "R", "R", "B", "B"], ["G", "G", "B", "B", "B"], ["B", "B", "B", "R", "R"], ["B", "B", "R", "R", "R"], ["R", "R", "R", "R", "R"]] rgMap =[["G", "G", "G", "B", "B"], ["G", "G", "B", "B", "B"], ["B", "B", "B", "G", "G"], ["B", "B", "G", "G", "G"], ["G", "G", "G", "G", "G"]] dfs를 통해 일치하는 색상만 탐색하여 dfs를 돌린 횟수를 기록하였다. ..
- [ 코딩테스트/백준 ][백준/BOJ] 11724번 연결 요소의 개수 (Swift 스위프트)2024-08-07 18:46:56문제 난이도: 실버 2사용 알고리즘: DFS Int 이중 배열을 통해 외부 배열은 정점의 위치를,내부 배열은 해당 정점과 연결된 정점들을 저장한다. 예제 입력 1을 넣게 되면graph는 [[], [2, 5], [1, 5], [4], [3, 6], [2, 1], [4]]이 된다. 1번 정점에 연결된 정점은 2, 52번 정점에 연결된 정점은 1, 53번 정점에 연결된 정점은 44번 정점에 연결된 정점은 3, 65번 정점에 연결된 정점은 2, 16번 정점에 연결된 정점은 4 여기서 연결 요소는 [1, 2, 5], [3, 4, 6]으로 총 2개이다.import Foundationlet input = readLine()!.split(separator: " ").map { Int($0)! }let n = input..