일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 구조적 정체성
- 앱 성능 개선
- 명시적 정체성
- 라이브러리 없이
- 리액트
- launchscreen
- 리액트 네이티브
- launch screen
- data driven construct
- completion handler
- 360도 이미지 뷰어
- React Native
- native
- requirenativecomponent
- 360도 뷰어
- 뷰 생명주기
- React-Native
- Android
- ios
- react-native-fast-image
- 스켈레톤 통합
- 네이티브
- panorama view
- SwiftUI
- 뷰 정체성
- @sendable
- ssot
- react
- 360도 이미지
- 파노라마 뷰
- Today
- Total
목록개발지식 정리/알고리즘 (18)
Neoself의 기술 블로그

앱에서 이미지를 빠르게 로딩하는 것은 사용자 경험에 중요한 영향을 미칩니다. 특히 자주 방문하는 화면의 내 이미지 로딩 속도는 앱의 전반적인 체감 성능에 직접적으로 연결됩니다. 이번 글에서는 NeoImage 라이브러리에 우선순위 캐시 전략을 도입하여 나의 책장 탭의 이미지 로딩 시간을 단축한 과정을 소개합니다."나의 책장" 탭은 사용자가 보유중인 책의 이미지를 포함하고 있습니다. 이 탭으로 진입할 때마다 메모리 저장소에 캐싱되어있지 않으나, 디스크에 이미지 데이터가 캐싱되어있을 경우, io 작업에 의한 오버헤드가 발생했고, 이는 사용자 경험을 저하시키는 요인이 될 수 있다고 판단했습니다.loaded with NeoImage in 0.01776 seconds loaded with NeoImage in 0...
누적합 방식으로 해당 문제를 접근하고자 했습니다.실제 기둥을 순회할때마다, 순회하였던 이전 기둥보다 높이가 낮으면 무시해야했기 때문입니다.하지만, 이러한 누적합 형태는 가장 높은 기둥이 나올때까지만 반복해야만 합니다. 따라서, 가장 높은 높이의 기둥 위치를 저장한 후, 이를 기준으로 2개의 부분집합으로 나누어 누적합 연산을 각각 수행하였습니다.let num = Int(readLine()!)!var arr = Array()for _ in 0.. 이 과정에서 가장 시간이 오래 걸렸던 부분은 오른쪽에서 왼쪽으로 수행되는 수행되는 누적합 연산의 인덱스 참조였습니다. 특히 stride의 경우, through와 from에 전달되는 값은 실제로 순회되는 값 중 하나이기에 index out of range를 조심해야합..
시간복잡도에 가장 큰 영향을 주는 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..