본문 바로가기

전체 글

(49)
백준 [14888] - 연산자 끼워넣기 전형적인 백트래킹 문제이다. 연산자의 수는 N - 1이지만 연산자의 종류는 4가지 이기때문에, for문을 0 ~ 3까지 돌면서 각각의 연산자가 0보다 큰수, 즉 사용가능한지 먼저 확인하고, 만약 조건을 만족하면 해당 연산자를 가지고 이전 값과 함께 계산을 해 주었다.연산자를 사용할경우 연산자 수를 -= 1 해서 사용을 했다는 표시를 남겼고, 백트래킹에서 나왔을때는 다시 += 1 을 해주는식으로 해서 여러 경우의 수를 계산하였다.for(i = 0; i A는 지금까지의 누적된 값. current는 현재 사용하는 수열의 위치를 나타내고, 만약 current == N, 즉 모든 수열에 대한 계산이 끝났을경우 if문을 타서 min과 max의 값과 비교하고 갱신해주었다. 위에 올린 사진에는 안나와있지만, 예상되는 ..
백준 [9981] - Ski Course Design 처음에는 단순한 스위핑 알고리즘인줄 알았다. 각각의 높이에서 가장 높은수와 낮은 수의 값이 17이 넘어가면, 이들은 1씩 더하거나 빼서 차이를 17로 만들고, 17이 만들어졌을때 가장 낮은 수만큼 더해진 결과값을 채택하는식으로 했다.그러나 이럴경우 매번 앞뒤를 1씩 더하는 반복문이 너무 지저분했고, 치명적인 반려또한 존재했다.예를들어 N = 3와 [1, 5, 20]을 입력했을때, 정답은 1과 20을 각각 한칸씩 줄여서 1 + 1 = 2로 2가 출력되어야하는데, 내 알고리즘 같은 경우는 가장 낮은수를 먼저 움직여보고, 그 다음에 가장 높은수를 낮추는 식으로해서, 우선 17이 되거나 내 앞에있는 다음수, 그러니까 지금같은경우는 1이 5가 될때가지 1을 더하는 방식으로 진행하기 때문에, 1을 2칸 움직여서 3..
내가 몰라서 쓰는 스위프트(26) ARC란? ARC(Automatic Reference Counting)는 Swift에서 메모리 관리를 자동으로 해주는 시스템입니다. ARC는 객체가 언제 메모리에서 해제되어야 하는지를 자동으로 추적하고 관리하여, 개발자가 수동으로 메모리를 할당하거나 해제할 필요 없이 안정적으로 앱을 개발할 수 있게 해줍니다.ARC의 작동 방식참조 카운팅:Swift의 모든 클래스 인스턴스는 참조 카운트를 가지고 있습니다. 이 카운트는 해당 인스턴스를 참조하는 변수나 상수가 얼마나 많은지를 나타냅니다.새로운 인스턴스가 생성되면 참조 카운트는 1이 됩니다.인스턴스가 다른 변수나 상수에 할당될 때마다 참조 카운트가 증가합니다.반대로, 변수가 더 이상 인스턴스를 참조하지 않을 때 참조 카운트는 감소합니다.메모리 해제:참조 카운트가 0이 되..
mvc 같은 아키텍쳐가 중요한 이유 (1) MVC는 Model-View-Controller의 약자로, iOS 개발에서 널리 사용되는 소프트웨어 아키텍처 패턴입니다. 이 패턴은 코드의 역할을 명확히 분리하여 앱을 더 유지보수하기 쉽게 만들고, 코드의 재사용성과 확장성을 높이는 데 중요한 역할을 합니다.Model(모델): 앱의 데이터 계층을 담당합니다. 데이터의 저장, 불러오기, 비즈니스 로직 처리 등을 수행하며, UI와는 독립적으로 작동합니다. 이렇게 함으로써 모델은 UI와 상관없이 테스트할 수 있고, 다른 곳에서도 재사용이 가능합니다.View(뷰): 앱의 UI 계층을 담당하며, 사용자에게 보여지는 화면입니다. 데이터를 어떻게 시각적으로 표현할지를 처리하지만, 데이터에 대한 직접적인 처리는 하지 않습니다. 뷰는 오직 사용자에게 화면을 보여주고, 사..
내가 몰라서 쓰는 스위프트(25) firstIndex firstIndex(where:) 메서드는 Swift에서 컬렉션 내에서 주어진 조건을 만족하는 첫 번째 요소의 인덱스를 찾는 데 사용된다. 이 메서드는 해당 요소를 찾으면 그 인덱스를 반환하고, 조건을 만족하는 요소가 없으면 nil을 반환한다.공식 문서에 따르면:"Returns the first index in which an element of the collection satisfies the given predicate."즉, 컬렉션에서 조건(predicate)을 만족하는 첫 번째 요소의 인덱스를 반환한다. let names = ["Alice", "Bob", "Charlie", "David"]if let index = names.firstIndex(where: { $0.hasPrefix("C") }..
내가 몰라서 쓰는 스위프트(24) allSatisfy allSatisfy는 컬렉션의 모든 요소가 주어진 조건을 만족하는지 여부를 확인하는 고차 함수이다. 이 함수는 컬렉션의 각 요소를 조건에 맞게 평가하며, 모든 요소가 조건을 만족하면 true를 반환하고, 그렇지 않으면 false를 반환한다.공식 문서에서는 다음과 같이 설명하고 있다:Returns a Boolean value indicating whether every element of a sequence satisfies a given predicate. let numbers = [2, 4, 6, 8, 10]let allEven = numbers.allSatisfy { $0 % 2 == 0 }print(allEven) // truelet mixedNumbers = [2, 3, 6, 8, 10]let a..
내가 몰라서 쓰는 스위프트(23) dropFirst, dropLast 1. dropFirstdropFirst는 컬렉션의 첫 번째 요소 또는 지정한 수만큼의 초기 요소를 제외한 나머지 요소를 반환한다. 주로, 데이터를 순차적으로 처리하거나 첫 번째 요소를 제외한 나머지 데이터를 분석할 때 유용하다.공식 문서:"Returns a subsequence containing all but the specified number of initial elements."주로 사용되는 상황:헤더를 제거: CSV 파일이나 데이터를 처리할 때 첫 번째 행을 헤더로 사용하는 경우, dropFirst를 사용하여 데이터를 쉽게 추출할 수 있다.FIFO(First In, First Out) 방식 구현: 큐처럼 첫 번째 요소를 제거하고 나머지 요소만 필요할 때 사용된다.let numbers = [1, ..
내가 몰라서 쓰는 스위프트(22) suffix suffix는 Swift의 컬렉션에서 뒤에서부터 원하는 요소의 개수를 추출할 때 사용하는 메서드이다. 즉, 컬렉션의 끝부분에서 원하는 수만큼의 요소를 반환한다.공식 문서에서의 설명:"Returns a subsequence, up to the given maximum length, containing the final elements of the collection."suffix(_:)가 컬렉션의 끝에서부터 주어진 길이만큼의 부분 시퀀스를 반환하며, 특이하게도 만약 주어진 길이가 컬렉션의 전체 크기보다 크다면, 에러를 뱉거나 문제를 일으키지않고 전체 컬렉션을 반환한다. let numbers = [1, 2, 3, 4, 5]// 주어진 길이가 배열의 크기보다 작은 경우let lastTwo = numbers.s..