적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

반응형

분류 전체보기 568

[Swift] POP?

Swift 언어의 큰 특징 중 하나가 바로 프로토콜 지향 언어라는 것. 객체 지향 언어들은 공통 기능을 모듈화하기 위해 class의 상속을 이용하지만 Swift에서는 프로토콜을 활용하여 상속이 불가능한 struct enum 타입에서도 공통 기능을 모듈화하여 사용할 수 있도록 하였다. Apple은 2015년 9월, WWDC에서 Swift 2.0을 발표하면서 Swift는 프로토콜 지향 언어(Protocol-Oriented Language)라고 발표했다. 객체 지향 프로그래밍(Object Oriented Programming, OOP) 패러다임에 기반을 둔 언어들은 class의 상속을 사용해 해당 타입이 가지는 공통적인 기능을 모듈화해 구현한다. 하지만 class와 같은 참조 타입의 경우 다중 스레드 환경에서..

[Swift] Hashable이란? + Equatable 상속해야하는 이유?

Hashable 프로토콜을 준수하는 모든 인스턴스는 hashValue라는 정수형 프로퍼티를 갖고 있으며 이 값은 각각의 인스턴스를 식별하는 값이 된다. 즉 인스턴스끼리 같은지 다른지 비교해야하므로 Equatable 상속이 필요함 Set 또는 Dictionary의 Key로 hashable을 준수하는 모든 타입을 사용할 수 있음. 반드시 하나만 존재해야하는 딕셔너리의 키 값이나 중복된 값은 허용하지 않는 자료구조인 세트 public protocol Hashable : Equatable { var hashValue: Int { get } //deprecated func hash(into hasher: inout Hasher) } 해시를 사용하면 O(1)의 시간복잡도를 가질 수 있는 이유..? Hashable이..

[Swift 알고리즘] Codility demo task

코테 문제 시작 전에 테스트용 문제였는데 나름 잼써서.. ㅎ 원래 문제 풀 생각이 없었어서 대충 보다가 비록 시간 내에 통과하지는 못했지만..? ㅠ 아마도 맞겠지..? Write a function that given an array A of N integers, returns the smallest positive integer (greater than 0) that does not occur in A. For example, given A = [1,3,6,4,1,2], the function should return 5. Biven A = [1,2,3], the function should return 4. Given A = [-1,-3], the function should return 1. Wri..

Algorithm/Codility 2023.01.04

[Swift 알고리즘] 백준 2805 나무 자르기

○ 이분탐색 4단계 백준 2805 나무 자르기 문제 나무 M미터 필요. 목재 절단기 높이 h 지정. 한 줄에 연속해있는 나무 모두 절단. 20 15 10 17 -> h: 15 -> 15 15 10 15 -> 길이 5, 2 인 나무 들고 집에 갈 것 (총 7 미터) h : 0 ~ 양의 정수. 나무를 필요한 만큼만 집으로 가져갈 것. 적어도 M 미터의 나무를 집에 가져가기 위해 절단기 설정 높이 최댓값 구하기 입력 첫줄 - 나무의 수 N, 가져가려는 나무 길이 M. 1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000 둘째줄 - 나무의 높이. M Int { var s = 0 var e = trees.max()! var result = 0 while s < e { let mid = (s +..

Algorithm/Baekjoon 2023.01.03

[Swift] protocol 프로토콜이란?

프로토콜이란 어떤 기능을 구현하기 위해 필요한 것들을 모아놓은 약속이라고 할 수 있다. 프로토콜에서는 해당 기능을 구현하기 위해 사용되어야 할 변수 / 메서드의 선언만 가능하며 로직을 넣을 수는 없다. 프로토콜에서 내부 기능까지 구현을 하고 싶다면 extension 으로 로직을 구현해 프로토콜을 확장하여 사용할 수도 있다. 또한 프로토콜을 채택하는 곳에서 generic 타입을 이용하고 싶다면 associatedtype 키워드를 사용하여 선언을해 줄 수 있다. + 이렇게 프롤토콜을 활용하면 class 뿐 아니라 상속이 되지 않는 enum, struct 에서도 공통 기능을 모듈화하여 사용할 수 있다는 장점 Protocol 이란? - A protocol defines a blueprint of methods,..

[Swift 알고리즘] 백준 1654 랜선 자르기

△ 이분탐색 3단계 백준 1654 랜선 자르기 문제 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm는 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 때는 항상 센티미터 단위로 정수길이만큼 자른다고 가정하자. N개보다 많이 만드는 것도 N개를 만드는 것에 포함된다. 이때 만들 수 있는 최대 랜선의 길이를 구하는 프로그램을 작성하시오..

Algorithm/Baekjoon 2023.01.02

[Swift 알고리즘] 백준 10816 숫자 카드 2

해시 ○ 이분탐색 X 백준 10816 숫자 카드 2 이분 탐색 예제로 나와서 풀었는데, 해시로 풀어버렸다.. 해시로 푸는게 훨씬 간단하고 편한거같은데..? 이분탐색은 도대체 어떻게... 문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다..

Algorithm/Baekjoon 2023.01.01

[Swift] 정렬 sort / sorted 차이점

Swift에서의 정렬 메서드 sort() 와 sorted() 의 차이에 대해 알아 보았다. 둘 다 시간복잡도는 O(n log n)으로 동일하지만, 사용법이 다르다. sort Sorts the collection in place. sort() 는 배열을 제자리에서 변경하며 값을 정렬하기 때문에 원본 배열의 값이 바뀐다. 값 자체가 변경이 되는 메서드이기 때문에, 정렬하고자 하는 컬렉션은 mutable 이어야 한다. mutating func sort() var arr = [7,2,16,1] arr.sort() print(arr) // [1,2,7,16] arr.sort(by: >) print(arr) // [16,7,2,1] sorted Returns the elements of the sequence, s..

Algorithm/참고 2022.12.31

[알고리즘] Binary Search 이분탐색

이분탐색 N개의 수가 크기 순서대로 배열되어 있을 때 특정 수 K가 몇 번째 위치에 있는지 빠르게 찾는 방법 한 가운데에 있는 수를 보자 짝수면 가운데서 앞번째 절반만 남기고 그 안에서 찾기 줄어든 범위 내에서 재귀적으로 해결 한 번에 배열이 절반씩 줄어들기 때문에 시간복잡도는 O(log n) 재귀방식 or while 반복문 사용 가능 이분탐색 응용 parametric search 최적화 문제를 결정 문제로 바꾸어 푸는 것 최적화 문제 : f(i) = 1 이 되는 i 의 최솟값을 구하여라. 결정 문제 : 어떤 i 에서, f(i) = 1 인가? 이분탐색 문제들 https://www.acmicpc.net/workbook/view/9764 백준 1920 수 찾기 백준 10816 숫자 카드 2 백준 1654 랜..

728x90
반응형