일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- React-Native
- 스켈레톤 통합
- 리액트
- 앱 성능 개선
- native
- 3b52.1
- 360도 이미지
- requirenativecomponent
- React Native
- 리액트 네이티브
- launchscreen
- 뷰 생명주기
- 명시적 정체성
- 구조적 정체성
- ssot
- ios
- 네이티브
- SwiftUI
- react
- Android
- 라이브러리 없이
- 360도 이미지 뷰어
- 360도 뷰어
- react-native-fast-image
- panorama view
- 파노라마 뷰
- privacyinfo.plist
- 뷰 정체성
- data driven construct
- launch screen
- Today
- Total
목록개발지식 정리/알고리즘 (16)
Neoself의 기술 블로그
시간복잡도에 가장 큰 영향을 주는 N값의 범위가 1let N = Int(readLine()!)!var arr = [Int]()for _ in 0..)print(arr[4])하지만, 위 코드로 성공했으면 실버 3이 아니겠죠. 위 코드의 시간복잡도는 아래와같이 분석해볼 수 있습니다. 1. 입력 처리 부분: 이중 For문으로 append() 실행O(N^2) 2. 정렬 부분 : sort()여기서 sort 메서드느 O( n log n )를 가지며, arr 크기는 N^2입니다O(N^2 * logN^2) = O(N^2 * 2logN) = O(N^2 * logN) 따라서 전체 시간복잡도는 아래와 같습니다.O(N²) + O(N² log N) + O(1) = O(N² log N) 그다음으로 시도해본 것은 우선순위 큐를 ..
이글은 Tree구조의 알고리즘 문제를 풀고자할때, 제가 취했던 접근방식들을 정리하고자 작성한 글입니다. 미숙한 점이 아직 많지만, 정리가 되는대로 업데이트를 진행하고자 합니다. 알고리즘을 풀기 이전 가장 먼저 정해야할 것은 탐색 방식을 결정하는 것입니다.DFS: 경로찾기, 사이클 탐지와 같이 한 경로를 끝까지 탐색한 후 다른 경로를 탐색하는 방식의 경우 사용BFS: 최단 경로 문제나 레벨 단위 처리와 같이 같은 레벨의 노드들을 먼저 탐색하는 방식의 경우 사용탐색방식이 결정되었다면, 어떤 패턴을 사용할 수 있는지 확인합니다.Bottom-up 접근최하단 노드부터 루트로 올라가는 방식:트리의 높이 구하기, 트리의 지름구하기와 같은 케이스에 유용Top-down 접근경로의 합구하기, 레벨 순회와 같이 루트에서 시..
프린터 큐import Foundationfor i in 0 ..queue[0].priority}) { queue.append(queue.removeFirst()) } else { // 대상 문서일 경우 출력 및 while문 중단 if queue[0].index == M { print(cnt+1) break } // 맨 앞의 문서 출력하여 제거 및 cnt에 1 추가 queue.removeFirst() cnt+=1 } }}대상 문서가 최종적으로 몇번째에 출력되는지 확인하기 위해선, 모든 ..
프린터 큐for i in 0 ..queue[0].priority}) { queue.append(queue.removeFirst()) cnt+=1 } else { // 대상 문서일 경우 출력 및 while문 중단 if queue[0].index == M { print(cnt) break } // 맨 앞의 문서 출력하여 제거 및 cnt에 1 추가\ queue.removeFirst() cnt+=1 } }} 기존 코드더보기import Foundationvar cnt: Int..
분해합let input = readLine()!let startNum = max(0,Int(input)!-9*input.count) // 생성자의 최소가능값var ans = 0for num in (startNum.. 후위 표기식2import Foundationlet N = Int(readLine()!)!let arr = Array("ABCDEFGHIJKLMNOPQRSTUVWXYZ").map { String($0) }[0..
벌집import Foundationlet input = Int(readLine()!)!var stdNum = 8 // 다음단계로 넘어가는 기준숫자var offset = 12 // 기준숫자 변동폭var ans = 2// 1의 경우, 변동폭 예외적으로 4 차이남 따라서 예외 케이스if input == 1 { print("1") } else { while true { if input 필요로 하는 블록 수가 변경되는 기준숫자값이 단계별로 일정하게 6씩 증가하는 것을 알 수 있었다. 다만 1에서 다음단계로 넘어갈 경우, 4씩 증가하였기에 이는 예외로 처리하여 고정적으로 1을 출력하게 해주었다. 블랙잭import Foundationlet arr = readLine()!.components(sepa..
요세푸스 문제import Foundationlet input = readLine()!.components(separatedBy:" ")var arr = Array(1...Int(input[0])!)var id = 0var ans:[String] = []while !arr.isEmpty { let targetId = (id+Int(input[1])!-1)%arr.count // K번째 사람 숫자 ans.append(String(arr[targetId])) // 숫자 배열에 더하기 arr.remove(at:targetId) // 해당 숫자 배열에서 제거 id=targetId}print("") 직각삼각형import Foundationwhile true { let arr = read..
윤년let num = Int(readLine()!)!print(num%4 == 0 && (num%100 != 0 || num%400 == 0) ? "1" : "0")여기서 != 연산자를 양옆에 공백 없이 사용하면 컴파일 에러 발생한다... 사분면 고르기let a = Int(readLine()!)!let b = Int(readLine()!)!var ans = -1if a 알람시계import Foundationvar arr = readLine()!.components(separatedBy:" ").map{Int($0)!}if 45>arr[1] { arr[0]=(arr[0]+23)%24}arr[1]=(arr[1]+15)%60print("\(arr[0]) \(arr[1])") 소수 찾기import Foun..
위 이미지는 제 현재 프로필 이미지입니다... 잘은 모르겠지만, 일단 롤로치면 아이언 5이지 않을까요? 오늘부터 백준으로 알고리즘 루틴을 아예 바꿔볼 생각입니다. A+Bimport Foundationlet input = readLine()!let arr = input.components(separatedBy:" ")print("\(Int(arr[0])!+Int(arr[1])!)")확실히 프로그래머스에 비해선 많이 불친절한것같습니다. 날것의 맛이 좀 있는 듯하네요...! readLine 함수서부터 시간을 생각보다 많이 쓰게될줄은 몰랐습니다... A-Bimport Foundationlet input = readLine()!let arr = input.components(separatedBy:" ")print..
K번째 수func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] { return commands.map{$0.map{$0-1}}.map{ array[$0[0]...$0[1]].sorted()[$0[2]]}}주어진 commands 배열의 경우 배열용 id에서 1이 더해진 값을 담고 있었기 때문에, map{$0.map{$0-1}} 고차함수를 적용해 2차원 배열 내부 값들을 일괄 변경해주었다.그 이후에 범위 연산자를 통해 array의 일부 영역에 접근, 오름차순 정렬 후 $0[2]번째 값을 접근하였다. 두 개 뽑아서 더하기func solution(_ numbers:[Int]) -> [Int] { var ans:[Int] = [] for i in..