전체 글

https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 해당 문제를 풀면서 누적합을 처음 접했다. 문제를 보고 값을 계산해서 저장해서 꺼내서 사용하면 될 것 같다는 생각은 들었는데, 정확한 해결방법이 누접합!인지는 몰랐다..! 누적합에 대해 알아보자! 누적합 특정 구간의 합을 찾는데 유용한 알고리즘 누적합 알고리즘은 연속된 원소들의 합을 빠르게 계산하는 알고리즘입니다. 배열과 같은 시퀀스 데이터에서 일부 구간의 합을 찾는 데 사..
Singleton 여러 객체에서 공용으로 객체를 사용하고 싶을 때 사용한다. 일반적으로 shared라는 이름의 상수를 만든다. static 키워드를 붙인다. 이니셜라이저를 private으로 만들어서, 외부에서 생성을 불가능하게 해야 한다. 예시 환경설정 네트워크 연결처리 데이터 관리 Singleton을 사용하는 이유 데이터 공유(하나의 객체 지속적 참조) 메모리 절약 코드 예시 class Singleton { static let shared: Singleton = Singleton() var numOfBook: Int private init() } Singleton.shared.numOfBook = 10 iOS에서 사용하는 싱글톤 패턴의 객체 let application = UIApplication.sh..
· 💻 Develop
아카데미에서 프로젝트하던 중 파일 네이밍에 관해 논의했던 적이 있었다. 그때는 우리(iOS개발자)끼리 서로 합의만 하면 된다고 말이 나왔어서, 별다른 말을 꺼내지 않고 지나갔다. 추후에 개인 프로젝트를 진행하면서 어떤 네이밍이 더 보편적일지 검색했고, 블로그를 발견하게 됐다. 이를 참고해서 정리해보았다. 알아보자 ! 서비스(Service) 개념: 서비스 레이어 패턴을 기반으로 하며, 비즈니스 로직을 처리하고 다양한 컨트롤러들이 공통으로 사용하는 인터페이스를 제공합니다. 기능: 특정 플랫폼이나 사용자에 대한 지식을 가지지 않고, 일관된 인터페이스를 제공하여 비즈니스 로직을 실행합니다. 컨트롤러들이 필요로 하는 기능을 제공하고, 다양한 부분에서 공유하여 사용할 수 있도록 합니다. 역할: 비즈니스 로직을 처리..
카카오의 블로그 검색 API를 사용했는데 결과값에 HTML태그가 포함되어 있어 이를 지우고 싶었다! String에서 "]+>|"" 이 친구들을 삭제해주면 되었다! ]+> 이 부분이 html 태그를 거르는 부분이고, " 이 부분이 정규표현식을 통해 걸러지지 않는 부분을 또 한번 걸러내는 부분이다 func stripHTMLTags(from htmlString: String) -> String { var string = htmlString.replacingOccurrences(of: "]+>|"", with: "", options: .regularExpression, range: nil) return string } 클래스 내에 이렇게 메서드로 작성해주었고, String의 Extension으로 구현해도 될 듯..
· 💻 Develop
💬 CI (Continuous Integration) CI란 지속적 통합, 빌드, 테스트를 의미하며, 버전관리 툴을 통해 코드를 가져와서, Build에 문제가 없는지, Test가 잘 작동되는지 확인하고 알려주는 것이다. CI를 통해 전체 애플리케이션을 구성하는 서로 다른 모듈 등의 전반적으로 테스트를 수행할 수 있게 된다. 또한 코드의 품질을 더 향상시킬 수 있으며 릴리즈 시간을 단축시킬 수 있는 장점이 있고, 코드의 충돌 시 CI를 통해 버그를 발견해 수정할 수 있게 된다. CI 서비스 - Jenkins - Bitrise - CircleCI 💬 CD (Continuous Delivery/Continuous Deployment) 두가지 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하며, 각각 지속적 제..
dropFirst(_:) 지정된 개수의 초기 요소를 제외하고, 모두 포함된 서브시퀀스를 반환합니다. func dropFirst(_ k: [Int]() = 1) -> Self.SubSequence k 컬렉션 시작 부분에서 삭제할 요소의 수. k는 0보다 크거나 같아야 합니다. 기본은 1입니다. removeFirst(_:) 컬렉션의 시작 부분에서 지정한 수의 요소를 제거합니다. mutating func removeFirst(_ k: Int) k 컬렉션에서 제거할 요소의 수. k는 0 이상이어야 하며 컬렉션의 요소의 수를 초과할 수 없습니다. 주요 차이점 이 두 메서드의 주요 차이점은 dropFirst는 요소를 제거한 새로운 배열을 반환하면서 원본 배열은 변경되지 않는 반면, removeFirst는 첫 번째 ..
프로퍼티 래퍼 @Environment @Environment는 SwiftUI에서 사용되는 프로퍼티 래퍼(wrapper)로, SwiftUI 뷰의 컨텍스트(Context)에 대한 정보를 제공합니다. @Environment를 사용하면 뷰에서 시스템의 설정이나 상태와 같은 컨텍스트에 대한 정보에 액세스할 수 있습니다. 예를 들어, 뷰가 다크 모드에서 실행 중인지 여부를 확인하고 해당에 따라 다른 스타일을 적용할 수 있습니다. 또한 사용자의 로케일에 맞게 텍스트를 표시하거나, 시스템의 액세스 권한에 따라 다른 기능을 제공하는 등의 작업도 가능합니다. @Environment는 일반적으로 @State, @Binding, @ObservedObject 및 @EnvironmentObject와 함께 사용됩니다. 이들은 모두..
Property Wrapper 란? Swift에서 property wrapper는 속성을 감싸고 추가 동작을 제공하는 래퍼(wrapper) 타입입니다. Property Wrapper의 장점 Property Wrapper는 코드의 가독성을 높이고, 중복 코드를 줄이며, 작성해야 하는 코드 양을 줄이기 위해 사용됩니다. Swift에 이미 존재하는 Property Wrapper 1. @IBOutlet - Interface Builder의 아울렛을 나타내며, 해당 인터페이스 요소와 연결된 속성을 선언할 때 사용됩니다. 2. @Published - SwiftUI의 ObservableObject 속성을 나타내며, 해당 속성이 업데이트 될 때마다 observer에게 변경 사항을 알리도록 합니다. 3. @Environ..
ViewBuilder란? 클로저에서 뷰를 구성하는 커스턴 매개변수 속성입니다. ViewBuilder는 자식 뷰를 생성하는 클로저 매개변수에 대한 매개변수 속성으로 일반적으로 사용됩니다. 뷰 빌더를 사용해서 해당 클로저가 여러 자식 뷰를 제공할 수 있도록합니다. 즉, SwiftUI에서는 ViewBuilder를 사용하여 클로저 내에서 여러 개의 뷰를 생성할 수 있습니다. 이러한 개념을 확장하여, 사용자는 자신만의 매개변수 속성을 만들어 클로저에서 뷰를 생성하도록 지정할 수 있습니다. 이 매개변수 속성을 사용하면, 뷰를 생성하는 코드를 보다 간결하고 가독성 높게 작성할 수 있으며, 재사용성도 높아집니다. 예를 들어, 사용자 지정 매개변수 속성을 사용하여 뷰의 색상, 테두리 스타일, 배치 방식 등을 쉽게 변경할..
Button { } label: { Text("Next") .frame(width: 200.0, height: 100.0) .foregroundColor(.blue) .font(.system(size: 14, weight: .bold)) .overlay( RoundedRectangle(cornerRadius: 20) .stroke(.black, lineWidth: 5) ) } .background(.pink) .cornerRadius(20) //위의 cornerRadius값과 일치시키기 아직 버튼 클릭시 부자연스럽다!?
JINiOS
JINiOS