[iOS][Swift] Two Phase Initialization
Develop/iOS2024. 2. 9. 16:22[iOS][Swift] Two Phase Initialization

개요 초기화에 관해서 전체 내용을 정리하기 전에, two phase initialization에 대해서 먼저 보고 들어가는 것이 다른 개념들을 이해하는데 도움이 될 거라고 생각이 들었다. 그래서 two phase initialization에 대해 먼저 정리를 하고 나중에 초기화에 관해 전체적으로 보기로 했다. 두 단계로 진행되는 초기화 Swift의 클래스 초기화는 두 단계로 진행이 된다. 첫번째 단계에서는 클래스에 명시된 값에 따라 각 stored property들이 초기화가 된다. 모든 stored property에 대한 초기 상태가 정해지고 나면(예를 들면 메모리 할당), 두번째 단계가 실행이 된다. 두번째 단계에서는 클래스에게 stored property들의 값을 사용자가 설정 할 수 있는 기회가 ..

[iOS][Swift] Swift의 메모리 관리 : ARC 1
Develop/iOS2024. 2. 9. 16:08[iOS][Swift] Swift의 메모리 관리 : ARC 1

개요 기본적으로 거의 모든 컴퓨터는 2가지에 데이터를 보관한다. 하나는 디스크, 다른 하나는 메모리(RAM)로 힙 이라고도 한다. 우리가 보는 메모리 관리는 사실상 힙 메모리 관리라고 볼 수 있다. 디스크에 있는 데이터를 바로 가져다 쓰기에는 데이터를 읽는 속도가 굉장히 느리기 때문에, 당장 사용할 프로그램과 데이터들을 메모리에 미리 불러 놓은 뒤에 메모리의 빠른 읽기 속도를 활용하여 프로그램을 실행시킨다. 이는 아이폰에서도 똑같이 동작을 하며, 앱이 실행되는 동안 사용되는 클래스 인스턴스들은 모두 이 메모리 안에 저장이 된다. 메모리 관리라고 하면 엄청나게 거창한 무언가를 하는 것 처럼 느껴지지만 사실 프로그램이 요구로 하는 곳에 메모리 자원을 주고, 프로그램이 더 이상 사용하지 않는 메모리를 회수하는..

백준 1068번 트리 - SWIFT
Algorithm/BOJ PS2024. 2. 8. 12:21백준 1068번 트리 - SWIFT

문제 트리에서 리프 노드란, 자식의 개수가 0인 노드를 말한다. 트리가 주어졌을 때, 노드 하나를 지울 것이다. 그 때, 남은 트리에서 리프 노드의 개수를 구하는 프로그램을 작성하시오. 노드를 지우면 그 노드와 노드의 모든 자손이 트리에서 제거된다. 예를 들어, 다음과 같은 트리가 있다고 하자. 현재 리프 노드의 개수는 3개이다. (초록색 색칠된 노드) 이때, 1번을 지우면, 다음과 같이 변한다. 검정색으로 색칠된 노드가 트리에서 제거된 노드이다. 이제 리프 노드의 개수는 1개이다. 입력 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다. 셋째 줄에는..

백준 1021번 회전하는 큐 - SWIFT
Algorithm/BOJ PS2024. 2. 6. 15:26백준 1021번 회전하는 큐 - SWIFT

문제 지민이는 N개의 원소를 포함하고 있는 양방향 순환 큐를 가지고 있다. 지민이는 이 큐에서 몇 개의 원소를 뽑아내려고 한다. 지민이는 이 큐에서 다음과 같은 3가지 연산을 수행할 수 있다. 첫 번째 원소를 뽑아낸다. 이 연산을 수행하면, 원래 큐의 원소가 a1, ..., ak이었던 것이 a2, ..., ak와 같이 된다. 왼쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 a2, ..., ak, a1이 된다. 오른쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 ak, a1, ..., ak-1이 된다. 큐에 처음에 포함되어 있던 수 N이 주어진다. 그리고 지민이가 뽑아내려고 하는 원소의 위치가 주어진다. (이 위치는 가장 처음 큐에서의 위치이다.) 이때, 그..

백준 1019번 책 페이지 - SWIFT
Algorithm/BOJ PS2024. 2. 6. 14:18백준 1019번 책 페이지 - SWIFT

문제 지민이는 전체 페이지의 수가 N인 책이 하나 있다. 첫 페이지는 1 페이지이고, 마지막 페이지는 N 페이지이다. 각 숫자가 전체 페이지 번호에서 모두 몇 번 나오는지 구해보자. 입력 첫째 줄에 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 0이 총 몇 번 나오는지, 1이 총 몇 번 나오는지, ..., 9가 총 몇 번 나오는지를 공백으로 구분해 출력한다. 문제 링크 1019번: 책 페이지 첫째 줄에 0이 총 몇 번 나오는지, 1이 총 몇 번 나오는지, ..., 9가 총 몇 번 나오는지를 공백으로 구분해 출력한다. www.acmicpc.net 풀이 가장 처음 생각한 것은 자릿수에 따른 숫자 등장 횟수였다. 1234라는 수를 생각해보자. 1부터 이 수에 도달할..

백준 1011번 Fly me to the Alpha Centauri - SWIFT
Algorithm/BOJ PS2024. 2. 5. 17:00백준 1011번 Fly me to the Alpha Centauri - SWIFT

문제 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다. 그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, 그 크기와 질량이 엄청난 이유로 최신기술력을 총 동원하여 개발한 공간이동 장치를 탑재하였다. 하지만 이 공간이동 장치는 이동 거리를 급격하게 늘릴 경우 기계에 심각한 결함이 발생하는 단점이 있어서, 이전 작동시기에 k광년을 이동하였을 때는 k-1 , k 혹은 k+1 광년만을 다시 이동할 수 ..

[iOS][Swift] MetaType이란
Develop/iOS2024. 1. 23. 18:28[iOS][Swift] MetaType이란

메타타입(MetaType)? Swift의 메타타입(Metatype)은 타입 자체를 나타내는 타입이다. 일반적으로, 우리는 변수에 값을 저장하거나, 클래스의 인스턴스를 생성할 때 타입을 사용한다. 예를 들어, `Int`, `String`, `Array` 등이 타입이고, 추가로 정의한 클래스나 구조체들도 타입으로 사용할 수 있다. 하지만 Swift에서는 이러한 타입들 자체를 값으로 다룰 수 있고, 이를 위해 메타타입이 사용된다. 메타타입은 명함으로 생각하면 조금 이해가 쉽다. ‘저는 이런 타입이에요’를 실체화, 인스턴스화 한 게 명함과 비슷하다. ▼ 메타타입의 존재 의의 "그렇다면 Swift는 메타타입을 어떤 장점 때문에 사용하는 것일까?" 메타타입을 이용하는 큰 이유는 아래와 같다. 동적 생성과 타입 검사..

Swift로 PS 하기
Algorithm/BOJ PS2024. 1. 20. 22:20Swift로 PS 하기

개요 Swift로 PS를 한다는 것 Swift로 PS를 한다는 것은 직진할 수 있는 길을 한 바퀴 돌아가거나, 평범한 길 대신에 가시 밭길을 걷거나, 그냥 스스로를 고문하는 그런 것과 비슷하다. ▼ 사실 Swift로 PS를 한다고 하면 조금 말리고 싶지만, 대부분이 하고 싶어서 하는게 아니라 iOS 개발자로 취직할 때 Swift로 PS를 하지 않고 다른 언어로 하면 쿠사리를 먹는다는 정보를 듣고 하는 것임을 알고 있다. 그게 아니라 재밌어서라던가, 언어가 잘 맞는다는 이유면 굳이 말릴 필요가 없는거 같다. 약간 고통을 좋아하는 사람인가 생각한다. “그러는 너는 왜 Swift로 하는거냐” 그야… 재밌으니까…! 필자의 경험 필자는 솔직히 PS를 잘 한다고 하기는 힘든 레벨에 위치해있다. 하지만 C++과 Sw..

백준 16234번 인구 이동 - SWIFT
Algorithm/BOJ PS2024. 1. 20. 17:34백준 16234번 인구 이동 - SWIFT

문제 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이동은 하루 동안 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속된다. 국경선을 공유하는 두 나라의 인구 차이가 L명 이상, R명 이하라면, 두 나라가 공유하는 국경선을 오늘 하루 동안 연다. 위의 조건에 의해 열어야하는 국경선이 모두 열렸다면, 인구 이동을 시작한다. 국경선이 열려있어 인접한 칸만을 이용해 이동할 수 있으면, 그 나라를 오늘 하루 동안은..

image