전체 글 68

[네트워크] RESTful, REST API

[네트워크] RESTful, REST API REST 는 REpresentational State Transfer 의 약자로 로이 필딩의 박사논문에서 최초로 소개되었습니다. 이는 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다. 로이 필딩은 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습이 안타까워 웹의 장점을 최대한 활용할 수 있는 아키텍쳐로 REST 를 발표했다고 합니다. REST 는 크게 3가지 항목으로 구성됩니다. 자원 (Resource) - HTTP URI (Uniform Resource Identifier) 를 통해 자원 명시 행위 (Verb) - HTTP Method (POST, GET, PUT, DELETE) 사용한 CRUD (Crea..

[백준] 2461.대표 선수 (Swift)

[백준] 2461.대표 선수 (Swift) https://www.acmicpc.net/problem/2461 2461번: 대표 선수 입력의 첫 번째 줄에는 학급의 수를 나타내는 N과 각 학급의 학생의 수를 나타내는 M이 하나의 빈칸을 사이에 두고 주어진다. 단, 1 ≤ N, M ≤ 1,000이다. 두 번째 줄부터 N개의 줄에는 각 줄마다 한 www.acmicpc.net 풀이 각 배열마다 수를 하나씩 뽑아 그 중 최대값과 최소값의 차이가 제일 작은 경우를 구하는 문제입니다. 처음에는 Heap 을 이용해 최소값을 모두 뽑은 다음, 최대값과 최소값의 차이를 계산한 뒤 그 중 최소값들을 삭제하고 다시 값을 뽑는 식으로.. 진행할 계획이었습니다. 입출력 예시는 모두 맞았지만, O(n^2) 정도로 코드를 작성하다보..

[백준] 2564.경비원 (Swift)

[백준] 2564.경비원 (Swift) https://www.acmicpc.net/problem/2564 2564번: 경비원 첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄 www.acmicpc.net 풀이 탐색할 좌표들은 주어진 사각형의 가장자리에만 위치하고 있습니다. 저는 일단 이 좌표들을 2차원 배열 위에 옮겼습니다. 좌표들은 칸이 아닌 점에 위치하고 있기 때문에 행과 열의 개수는 하나씩 더 크게 선언해주었습니다. 문제의 입출력 예시를 2차원 배열에 저장한 것은 아래와 같습니다. 하지만 이렇게 되면 좌표간의 거리를 계산하는것이 매우 복잡해지기 때문에 저는 ..

[프로그래머스] 메뉴 리뉴얼 (Swift)

[프로그래머스] 메뉴 리뉴얼 (Swift) https://programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 풀이 Dictionary 의 특성들을 적극 활용해서 해결한 문제였습니다. 주문들을 주어진 길이만큼 조합하여 그 중 가장 빈도수가 많은 메뉴를 골라내는 문제입니다. 주의해야할 점은 메뉴도, 그리고 결과를 담은 배열도 모두 정렬되어있어야 한다는 점입니다. 일단 몇가지 메뉴를 조합해야하는지 숫자가 주어지기 때문에 이를 살펴봤습..

[네트워크] OSI 7계층

[네트워크] OSI 7계층 정보통신산업 초기에는 정보통신 업체들이 각자의 방법으로 장비를 개발해 제조사가 다르면 서로 통신이 불가능했습니다. OSI 7계층은 네트워크에서 통신이 일어나는 과정을 7단계로 분리한 것으로, 서로 다른 제조사 시스템 간의 호환성 문제 해결을 위해 iso 국제표준에 의해 재정되었습니다. OSI 는 Open System Interconnection 의 약자로, OSI 7계층을 준수하는 통신장비들은 서로 호환이 가능해집니다. 장단점 그렇다면 이를 7개의 계층 구조로 나타낸 이유가 있을텐데, 그 장단점에 대해 알아보겠습니다. 장점 네트워크 통신을 계층 구조로 나누다면 각 계층은 독립적인 역할을 할 수 있음 통신이 일어나는 과정을 이해하기 쉽고, 이를 단계별로 파악할 수 있게 됨 각 계..

[Swift] GCD & Dispatch Queue

[Swift] GCD & Dispatch Queue 프로그램은 실행되며 여러가지 작업을 수행해야 하는데, 멀티스레드 프로그래밍을 이용하지 않고 하나의 스레드에서 작업을 모두 수행한다면 당연히 많은 시간이 걸릴것입니다. iOS 의 메인 스레드는 UI 를 화면에 그려주는 스레드입니다. 이 경우 화면에 UI 를 그려줘야 하는데, 단순 연산이나 네트워크 요청 등 다른 작업들을 모두 메인 스레드에서 실행한다면 앱이 버벅거릴수도 있을 것입니다. GCD (Grand Central Dispatch) 그래서 다른 스레드에서 여러 작업을 수행할 수 있도록 적절하게 분배해주는 과정이 필요합니다. 이는 동시성 프로그래밍이라고 불립니다. GCD 는 멀티코어와 멀티프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 해줍니다. ..

iOS 개발/Swift 2022.05.27

[운영체제] 프로세스와 스레드 (Process & Thread)

프로세스 개념 프로세스는 메모리에 올라와 실행되고 있는 프로그램의 독립 객체를 말합니다. 우리가 프로그램을 실행시키면 프로세스 객체가 생성됩니다. 이는 프로그램 실행에 필요한 내용이 메모리 (RAM) 에 적재된다는 것을 의미합니다. 프로세스는 OS 로부터 시스템 자원을 할당받아 실행되는데, 이 때 할당받는 시스템 자원은 CPU 시간, 운영되기 위해 필요한 주소 공간, 메모리 영역 등이 있습니다. 특징 프로세스는 각각 독립된 메모리영역 (Code, Data, Stack, Heap) 을 할당받음 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있음 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없음 한 프로세스가 다른 프로세스의 자원에 접근하려면 ..

[백준] 19238.스타트 택시 (Swift)

[백준] 19238.스타트 택시 (Swift) https://www.acmicpc.net/problem/19238 19238번: 스타트 택시 첫 줄에 N, M, 그리고 초기 연료의 양이 주어진다. (2 ≤ N ≤ 20, 1 ≤ M ≤ N2, 1 ≤ 초기 연료 ≤ 500,000) 연료는 무한히 많이 담을 수 있기 때문에, 초기 연료의 양을 넘어서 충전될 수도 있다. 다 www.acmicpc.net 풀이 BFS 를 이용한 최단거리 계산 문제입니다. 같은 거리에 있는 승객이 여러명이라면 행의 크기가 가장 작은 승객을, 그마저도 여러명이라면 열의 크기가 가장 작은 승객을 태우는 것이 문제의 조건입니다. 이를 해결하기 위해서 먼저 BFS 로 모든 승객과의 거리를 계산한 후에 최소거리에 있는 승객을 추려냈습니다. ..

[백준] 5639.이진 검색 트리 (Swift)

[백준] 5639.이진 검색 트리 (Swift) https://www.acmicpc.net/problem/5639 5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net 풀이 전위순회 입력대로 트리를 구성하여 후위순회로 출력하는 방법은 시간초과가 발생합니다. 따라서 전위순회 결과에서 규칙을 찾는 과정이 필요한 문제입니다. 전위순회는 루트 노드로부터 시작해 왼쪽 자식, 오른쪽 자식 순으로 진행되기 때문에 전위순회의 가장 첫번째 값은 루트 노드가 됩니다. 이진 탐색 트리의 특성 상 왼쪽 자식은 루트노드보다 ..

[백준] 1655.가운데를 말해요 (Swift)

[백준] 1655.가운데를 말해요 (Swift) https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 풀이 시간복잡도를 고려해야하기 때문에 힙을 사용하는 문제입니다. 풀이를 위해선 최대힙과 최소힙을 모두 사용하는데, Swift 는 힙 자료구조를 제공하지 않아 직접 구현해야 합니다. 힙에 관한 설명과 Swift 를 이용해 작성된 코드는 아래 링크에서 확인하실 수 있습니다. https://trumanfromkorea.tistory.com..