적당한 고통은 희열이다

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

반응형

Algorithm/참고 15

Swift 코드 실행 시간 측정 방법 (최신 방법..!)

개발을 하거나 코딩테스트 문제를 풀 때, 특정 코드가 실행되는 시간을 구하고 싶을 때가 있다. 아래의 함수들을 이용해 코드의 수행시간을 측정할 수 있다. 1. CFTimeInterval public func progressTime(_ closure: () -> ()) -> TimeInterval { let start = CFAbsoluteTimeGetCurrent() closure() let duration = CFAbsoluteTimeGetCurrent() - start return duration } progressTime { //실행 시간 측정할 코드 } 2. Date public func measureTime(_ closure: () -> ()) -> TimeInterval { let startD..

Algorithm/참고 2023.05.06

[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

modulo 10^9 + 7 이란? + 쓰는 이유?

프로그래밍 문제를 풀다보면 어떤 값으로 나눈 나머지를 반환값으로 요구하는 경우가 있다. 대표적으로 1000000007, 1000000009 등이 있는데, 왜 이런 값을 사용할까 궁금해져서 찾아보게 되었다. modulo 란? : the remainder of the division. 나눈 값의 나머지. 반환 값으로 modulo 쓰는 이유? Int 등의 자료형의 범위는 제한적이기에, 오버플로우를 방지하기 위해 모듈러 연산을 사용한다. 왜 1e9 + 7 ? 모듈러가 지나치게 작다면 언어의 표현력을 비효율적으로 사용하는 것이기에, Int 가 표현할 수 있는 범위를 최대한 활용하기 위해 Int의 max 값에 가까워야 한다. 참고 : hackerearth - Why output the answer modulo 10..

Algorithm/참고 2022.11.13

Swift 반복문

stride x부터 y까지 z만큼의 간격으로 반복문을 돌리는 것. for i in stride(from: x, to: y, by: z) : x ~ y 까지 반복문을 돌리는데, y는 포함시키지 않음. x ≤ range < y for i in stride(from: x, through: y, by: z) : y 까지 포함하여 x ~ y 까지 반복문 돌리기. x ≤ range ≤ y for i in stride(from: 5, to: 1, by: -1) { print(i) //5 4 3 2 } for i in stride(from: 5, through: 1, by: -1) { print(i) //5 4 3 2 1 } 단순히 하나씩이 아니라 n 씩 건너 뛰면서 반복문을 돌리거나, 주어진 순서와 반대로 반복문을 ..

Algorithm/참고 2022.10.29

코테공부 시행착오

문제 출제 유형 가장 많이 출제되는 다섯가지 유형 : DFS/BFS - 문자열 - 단순구현 - 완전탐색 - 해시 + DP, 재귀함수, 다익스트라 ... + 스택, 큐, 그리디 코딩테스트 볼 때 명심할 것 1. 디버깅의 범위를 이분탐색으로 좁히기 문제를 보고 구현 방식을 설계한 후 코드 작성을 해야, 추후 디버깅 시 단계별로 나누어 디버깅의 범위를 좁힐 수 있다. 2. 좁힌 범위를 논리적으로 분석하기 무작정 모든 곳에 print를 찍어보는 것이 아니라, 코드를 논리적으로 분석하고 흐름을 생각해보며 예외처리 누락 등 어디가 잘못되었는지 분석해봐야 한다. 3. 예외 케이스 TC를 직접 만들어 검증하기 주어진 테스트 케이스 말고도, 중복 허용할지 말지, 순서 중요한지 아닌지 등 문제별 각 예외케이스들에 대한 테..

Algorithm/참고 2022.10.27

[Swift 알고리즘] 소수 판별

코딩 테스트 연습문제로 종종 나오는 소수 찾기에 대해 제대로 알아보자 소수 Prime Number : 1 보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 자연수 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31,… 등은 모두 소수 소수가 아닌 자연수는 합성수 1은 소수도 합성수도 아니다. 소수 판별법 1 자연수 n이 소수인지 아닌지를 판정하려면, 인 범위에 있는 모든 소수 p로 n을 나누어 보아, 나누어 떨어지지 않으면 소수이고, 나누어 떨어지면 합성수이다. 즉, 소수는 양의 약수로 1과 자신만을 가진 자연수이며 합성수는 양의 약수가 1과 자기자신을 포함하여 3개 이상인 자연수이다. 참고 : 네이버 지식백과 어떤 자연수가 소수임을 판정하기 위해서는 √n 까지의 수 중 1을 제외하..

Algorithm/참고 2022.02.28

[Swift] 나누기

분수 값을 비교해야 하는데 문제가 생겼다. print(1/2) 하면 0.5 가 아니라 결과물로 0 이 출력된다. 나누기 해서 소숫점까지 받아와야 할 때는, 나누기 하려는 인자들 또한 소숫점 형태로 넣어줘야 한다눙.. 1/2의 /는 public func /(lhs: Int, rhs: Int) -> Int Int 형식의 값을 받아와 Int를 반환 1.0/2.0 의 /는 public func /(lhs: Double, rhs: Double) -> Double 소숫점 형식의 Double 값을 받아와 Double을 반환 (Float 도 상관업둠) 참고 : ZeddiOS - 나누기가 안될 때 * Float vs. Double Float와 Double은 부동 소수점을 사용하는 실수이며, 부동소수 타입이라고 한다. 스..

Algorithm/참고 2022.02.11

[Swift] 제곱 함수 pow, 제곱근 함수 sqrt

제곱 구하기 import Foundation let value = 3.0 pow(value, 2) // 9.0 제곱할 값 value, 제곱수 2 결과값을 Int로 변환하려니 다음과 같은 에러가 났다. Initializer 'init(_:)' requires that 'Decimal' conform to 'BinaryInteger' pow 의 두 인자를 모두 소수점형으로 바꾸면 해결이 된다. pow(_ x: Decimal, _ y: Int) -> Decimal 대신 다음 생성자를 사용하는 방식이다. (Double로 변환해도 가능) pow(_: Float, _: Float) -> Float 제곱근 구하기 import Foundation let value = 9.0 sqrt(value) // 3.0 func ..

Algorithm/참고 2022.02.09
728x90
반응형