전체 글

iOS/SwiftUI

[SwiftUI] 위도 경도 좌표로 경로선 그리기 (Canvas & Path)

오늘은 위도 경도 값을 가지고 경로선을 그려볼 것이다.  다른 지도 API는 어떤지 모르겠지만, 내가 사용해본 네이버 지도 API는 경로선 그리는 기능을 제공한다. 하지만 지도 위에 그리는 것이 아니라 경로선만 필요한 경우 직접 그려줘야 한다. 이 작업은 `Canvas`와 `Path`를 이용하려고 한다.   Canvas란?Canvas는 SwiftUI에서 제공하는 뷰로, 벡터 기반의 그래픽 작업을 간단하게 구현할 수 있도록 설계되었다.   Canvas 기본 구조 - context: 그리기 컨텍스트로, `stroke`나 `fill`같은 그리기 작업을 하는데 사용한다. - size: Canvas의 사이즈로, 너비와 높이를 나타내는 CGSize 구조체다. Canvas { context, size in } Pat..

알고리즘/자료구조

[자료구조/Swift] 힙(Heap) 구현하기

힙에 대한 설명은 이전 포스팅을 참고해주세요. 힙의 구현 힙을 구현하는 자료구조는 배열으로, 배열의 첫 번째 인덱스는 사용되지 않는다. 고로 루트 노드는 인덱스 1이고 아래 노드로 내려갈수록 인덱스가 쭉쭉 추가가 된다.  힙에서 부모 노드와 자식 노드 간의 관계왼쪽 자식의 인덱스 = `(부모의 인덱스) * 2`오른쪽 자식의 인덱스 = `(부모의 인덱스) * 2 + 1`부모의 인덱스 = `(자식의 인덱스) / 2`이 점을 참고해서 구현해보자 - !  기본 틀 `Comparable` 프로토콜을 채택하여 비교가 가능한 데이터 타입을 받도록 구조체를 생성한다. struct Heap { private var heap: [T] = [] private let comparer: (T,T) -> (Bool) ..

CS/자료구조

[자료구조] 힙(Heap)이란?

힙(Heap)이란?힙이란 완전 이진 트리의 일종으로, 여러 개의 값들 중 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다. 힙은 트리의 루트 노드에 데이터들의 최댓값 또는 최솟값을 저장한다.즉, 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰(작은) 이진 트리를 말한다. 최대 힙 & 최소 힙 최대 힙 (max heap)- 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 이진 트리 - 루트 노드에 힙의 최댓값 저장최소 힙 (min heap)- 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 이진 트리 - 루트 노드에 힙의 최솟값 저장 힙의 삽입 다음의 과정을 거쳐서 힙에 데이터를 삽입한다. 1. 힙의 가장 마지막에 데이터를 삽입한다. 2. 삽입한 노드의 부모 노..

Swift

[Swift] 싱글톤(Singleton) 패턴

싱글톤 패턴이란?싱글톤(Singleton) 패턴은 GoF 디자인 패턴 중 생성 패턴에 속하는 디자인 패턴으로, 객체의 인스턴스가 한 번만 생성되는 패턴이다.  생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 리턴한다. 이는 앱의 라이프사이클 동안 오직 하나의 클래스 인스턴스만 메모리에 올려두고 재사용하는 것을 의미한다.  Swift로 한 번 구현을 해보자.  `User`라는 클래스가 있을 때, `static`으로 인스턴스를 저장할 프로퍼티를 생성해준다. 그리고 사용자가 `init` 함수를 호출해서 인스턴스를 생성하는 것을 막기 위해 `init` 함수 접근제어자를 `private`으로 설정해준다. class User { static l..

알고리즘/PS

[BOJ] 22251 빌런 호석 (Swift)

문제 링크 https://www.acmicpc.net/problem/22251 문제 이름처럼 정말 빌런같았던 문제,, 질문 게시판을 참고해서 풀었다.  문제 접근반전시켜야 하는 LED 수 구하기  가장 첫 번째로 위 사진처럼 7세그먼트로 표현된 숫자를 다른 숫자로 바꾸기 위해 몇 개의 LED를 반전시켜야하는지 알아야 한다. 정말 처음 접근으로는 각 숫자 별로 다른 숫자로 바꾸기 위해 반전시켜야 하는 LED 수를 하나하나 써서 찾으려고 했다. 근데 코드로도 구할 수 있을 것 같아서 방향을 틀었다.  숫자 별로 불이 들어오는 표시등의 위치를 숫자로 표현한 후 차집합을 이용해서 반전시킬 LED 수를 구하자질문 게시판에서 얻은 아주 좋은 아이디어이다.  LED의 위치에 따라 숫자를 아래와 같이 부여했다. 그렇다..

iOS

[iOS] CMPedometer로 사용자의 걷기 데이터 받아오기 (이동 거리, 평균 페이스)

CMPedometer CMPedometer는 CoreMotion 프레임워크에 있는 클래스이다.  CoreMotion은 가속도계, 자이로스코프 등 여러 iOS 장치의 하드웨어에서 동작 관련 데이터를 제공할 수 있는 프레임워크이다.  처음에는 걸음 데이터를 받아오기 위해 어떤 클래스를 써야하는지 찾기 어려웠다. (CLLocation에는 CLLocationManager를 썼어서 CoreMotion에는 CMMotionManager를 쓰면 되는 줄 알았다는 ..) 공식 문서를 열심히 뒤적이다 발견한 것은 CMPedometer라는 클래스였다.  여기서 CMPedometer를 사용해서 데이터를 받아올 것이다!   CMPedometer의 문서를 읽어보면, CMPedometer 클래스는 시스템에서 생성한 실시간 걷기 데..

알고리즘/PS

[BOJ] 16928 뱀과 사다리 게임 (Swift)

문제 링크https://www.acmicpc.net/problem/16928 (미리보기가 왜 안될까 .. ㅜㅜ) 문제 접근- 보드의 사이즈는 10 x 10, 각 보드판에는 1부터 100까지의 숫자가 적혀있다.- i라는 위치에서 뱀과 사다리가 없다면, 갈 수 있는 곳은 i+1 부터 i+6 까지이다.- 뱀 또는 사다리가 있다면, 무조건 이동해야 한다. 위 정보를 가지고 그래프 탐색을 이용해야겠다고 생각했다.  문제 풀이보드의 사이즈가 고정이고, 특정 위치에서 갈 수 있는 위치를 모두 알 수 있기 때문에 탐색을 위한 배열을 이용한다. 배열 graph는 인덱스 0부터 100까지 총 101개이며, 각 요소로는 해당 인덱스(숫자)에서 이동할 수 있는 위치들을 저장한다.예를 들어, 1번에서 갈 수 있는 위치는 2번부..

iOS

[iOS] Naver Map SDK Swift Package 만들기

프로젝트를 진행하며 Naver Map을 사용해야 해서 SDK 설치를 알아보니 네이버 지도 SDK는 cocoapods를 통해서만 배포된다는 사실을 알게되었다. 관련 글을 열심히 찾아보던 중 네이버 지도 SDK를 SPM으로 설치할 수 있도록 Swift Package를 만드는 글을 발견하였다.  https://junbok97.tistory.com/314 [iOS] NaverMap SDK iOS SPM으로 추가하기NaverMap SDK SPM 왜 지원안해줌 ?프로젝트에서 mapKit대신 navermap을 사용하기로 결정하였는데 Tuist를 사용하여 프로젝트를모둘화를 하게되어 cocoapods를 사용하지 못하게 되었다그런데 naverMap SDK는 cocoajunbok97.tistory.com 평소 의존성 추가를..

시로-
오늘부터