일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 타임라인 포맷팅
- traits
- coordinator
- Tuist
- custom navigation bar
- domain data
- task cancel
- swift 점선
- rxdatasources
- identifiable
- custom ui
- scene delegate
- reactorkit
- DP
- RxSwift
- swift 백준
- BFS
- UIKit
- 버튼 피드백
- uikit toast
- swift bottomsheet
- swift navigationcontroller
- SWIFT
- swift concurrency
- swift dashed line
- task cancellation
- button configuration
- claen architecture
- swift custom ui
- custombottomsheet
- Today
- Total
목록swift 백준 (32)
김경록의 앱 개발 여정

풀이 아이디어- 두 가지 조건으로서 만들어지는 수를 찾아야 하는 문제라 오히려 거꾸로 찾아내는 방식을 택했습니다.- A B가 짝수인경우와 , B의 끝자리가 1인 경우를 찾아 수를 점차 줄여나갑니다. 풀이let ab = readLine()!.split(separator: " ").map{Int($0)!}var (a,b) = (ab[0], ab[1])func division2(_ input: Int) -> Int { return input / 2}func subtract1(_ input: Int) -> Int { var strInput = String(input) strInput.removeLast() return Int(strInput)!}// 최초 연산도 포함해야 합니다//..

풀이 아이디어그래프 탐색문제입니다.저는 기본적으로 bfs를 더 선호해서 bfs로 풀이합니다.문제 설명이 조금 부실하지만, 결국 색깔이 다른 타일의 크기를 구하는 문제와 같은 맥락입니다.쓰레기가 있는 타일을 1, 없는 타일을 0으로 지정하고 풀이합니다.자세한 설명은 코드를 참고해주세요풀이let nmk = readLine()!.split(separator: " ").map { Int($0)! }let (n, m, k) = (nmk[0], nmk[1], nmk[2])var dm = [0, 0, -1, 1]var dn = [-1, 1, 0, 0]var isVisited = Array(repeating: Array(repeating: 0, count: m), count: n)for _ in 0..= 0, next..

풀이 아이디어가장 일반적인 슬라이딩 윈도우로 풀이합니다단, 특이사항이 있는데 같은 구간합이 있는 경우가 몇번인지도 나태내줘야합니다매번 result = max(a,b) 로 치환하는 대신 조건문을 통해 진행합니다자세한 풀이는 코드의 주석을 참고해주세요풀이let nx = readLine()!.split(separator: " ").map { Int($0)! }let (n, x) = (nx[0], nx[1])let input = readLine()!.split(separator: " ").map { Int($0)! }var initialSum = input[0.. result { result = initialSum resultCount = 1 // 새로운 최대값이 등장했으므로 초기화 ..
풀이 아이디어슬라이딩 윈도우 알고리즘을 활용합니다자세한 풀이 방식은 주석을 참고해주세요.풀이let nk = readLine()!.split(separator: " ").map{Int($0)!}// n: 총 날짜수, k: 연속 날짜 수let (n,k) = (nk[0],nk[1])let input = readLine()!.split(separator: " ").map{Int($0)!}//첫 구간합을 구합니다.var initialSum = input[0..

슬라이딩 윈도우 란슬라이딩 윈도우(Sliding Window)는 연속된 구간을 다루는 문제에서 효율적인 계산을 위한 기법입니다. 주로 배열이나 문자열에서 연속된 구간을 처리할 때 사용됩니다. 이 기법은 한 번 계산한 값을 재사용하여 중복 작업을 줄이고, 전체 시간 복잡도를 최적화합니다.슬라이딩 윈도우는 두 개의 포인터(혹은 인덱스)를 사용하여 연속된 구간을 탐색하는 방식입니다.왼쪽 포인터(left)와 오른쪽 포인터(right)가 배열을 따라 이동하며 구간을 탐색합니다.처음에는 구간을 정하고, 이후 포인터를 이동시키면서 구간의 상태를 업데이트합니다.중요한 점은 구간의 시작과 끝만 변경하여 전체 배열을 다시 탐색하지 않고 효율적으로 계산한다는 것입니다.풀이 아이디어불이 꺼져있는 구간을 구한다최초 부족한 신호..
풀이 아이디어이분탐색 + 구현 문제입니다.이분탐색만으로 어떻게 해결해야하는지 애를 먹었는데조명으로 커버가 되는지 확인하는 작업을 거치는게 오히려 포인트인 문제였습니다. 자세한 설명은 주석 참고해주세요 풀이import Foundationlet n = Int(readLine()!)!let m = Int(readLine()!)!let input = readLine()!.split(separator: " ").map { Int($0)! }func isCoverd(with height: Int) -> Bool { var lastCovered = 0 for i in input { if i - height > lastCovered { return false } ..

풀이 아이디어dp 문제입니다.점화식을 구해야하는데,마지막 상자가 어떤것일때 몇개인지 를 구하면 됩니다 dp[i]: i번째 상자를 마지막으로 포함할 때 넣을 수 있는 상자의 최대 개수예를 들어, 상자 크기가 1, 2, 3, 5, 4라고 할 때:dp[0] = 1 (상자 1 하나만 포함)dp[1] = 2 (상자 1, 2 포함)dp[2] = 3 (상자 1, 2, 3 포함)dp[3] = 4 (상자 1, 2, 3, 5 포함)dp[4] = 3 (상자 1, 2, 4 포함)자세한 과정은 주석과 추가 설명을 덧붙이겠습니다.풀이import Foundationlet n = Int(readLine()!)!let input = readLine()!.split(separator: " ").map { Int($0)! }// dp 배..

문제 요점첫번째 이동할땐 가격에 상관없이 다음 지역까지 갈 만큼의 주유를 진행해야한다도착한 후엔 주유 할 필요가 없으므로 마지막 주유소의 가격은 고려 대상이 아니다.서브 태스크첫 풀이let n = Int(readLine()!)!let length = readLine()!.split(separator: " ").map{Int($0)!}let oilPice = readLine()!.split(separator: " ").map{Int($0)!}var totalLength = length.reduce(0, +)var result = 0// 처음엔 가격에 상관없이 넣어야함result += oilPice[0] * length[0]totalLength -= length[0]var minimumOilPrice = o..
풀이 아이디어백트래킹을 이용하는 문제입니다.resultArr의 길이에 조건을 두어 불필요한 탐색을 방지합니다.한 경로를 탐색한 후 removeLast()를 호출하여 상태를 복구하고 다른 경로를 탐색합니다.풀이import Foundationlet input = readLine()!.split(separator: " ").map{ Int($0)! }let n = input[0]let m = input[1]var resultArr: [Int] = []func dfs(_ start: Int) { if resultArr.count == m { print(resultArr.map { String($0) }.joined(separator: " ")) return } // ou..
저도 백트래킹은 처음이라 백트래킹의 개념에 대해 먼저 짚어보면 다음과 같습니다.백트래킹의 핵심DFS(깊이 우선 탐색)를 기반으로 합니다.탐색 중, 조건에 맞지 않는 경우를 가지치기(pruning)하여 탐색 범위를 줄입니다.탐색이 끝난 후, 상태를 이전으로 복원(backtracking)합니다.풀이 아이디어는 다음과 같습니다.DFS를 이용해 깊이 우선으로 탐색:M 길이에 도달할 때까지 가능한 숫자를 하나씩 추가.가지치기:이미 선택한 숫자는 다시 선택하지 않음.상태 복원:재귀 호출 후, 선택했던 숫자를 제거하고 이전 상태로 되돌아감.풀이 코드는 아래와 같습니다.풀이let nm = readLine()!.split(separator: " ").map { Int($0)! }let (n, m) = (nm[0], nm..