본문 바로가기

전체 글266

[Swift][누적합] 백준 2559번 (수열) 요구능력 누적합 문제풀이 누적합의 구간의 합을 구할 수 있는지를 묻는 문제이다. 손으로 인덱스와 숫자를 적어놓고 k를 빼주면 원하는 갯수의 누적합을 구할 수 있다는걸 알게될것이다. Int.max에 -1을 곱해준 이유는 최대값이 음수가 될 수 있는 경우를 고려해준것이다. if i -k < -1인 경우는 구하려는 누적합의 갯수만큼 나오지 않기 때문에 처리해준것이고, if i - k == -1인 경우는 맨처음부터 원하는 갯수인 k개만큼 나오기에 구해둔 누적합만 불러온것이다. 후기 최대값이 음수가 될 수 있다는점을 잘 고려하자. 코드 import Foundation let nk = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nk[0] let.. 2022. 5. 30.
[Swift][누적합] 백준 11659번 (구간 합 구하기4) 요구능력 누적합 문제풀이 기본적인 누적합에 대한 개념을 숙지한다면 쉽게 풀리는 문제이다. 후기 누적합의 개념에 대해 알아보았다! 코드 import Foundation let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nm[0] let m = nm[1] var arr = readLine()!.split(separator: " ").map{Int(String($0))!} var str = "" var prefixSum = Array(repeating: 0, count: arr.count) prefixSum[0] = arr[0] for i in stride(from: 1, to: arr.count, by: 1){ prefixSum.. 2022. 5. 30.
[Swift][우선순위 큐] 백준 1655번 (가운데를 말해요) 요구능력 우선순위 큐, 힙 문제풀이 두 개의 힙을 준비하고 leftHeap(최대 힙) rightHeap(최소 힙) 1) left와 right의 길이가 같으면 left에 넣는다. 2) left에 들어온 값이 right의 루트노드보다 크면 스위칭 두개의 힙으로 중간값을 구할 수 있는 문제가 있구나 하고 이해하자! 후기 빠른입출력코드 안적으면 시간초과난다.. 코드 struct Heap { private var elements: [T] = [] private let sortFunction: (T, T) -> Bool init (sortFunction: @escaping (T, T) -> Bool){ self.sortFunction = sortFunction } var isEmpty: Bool { return s.. 2022. 5. 27.
[Swift][우선순위 큐] 백준 11286 (절댓값 힙) 요구능력 우선순위 큐, 힙 문제풀이 최소힙 문제에서 힙에 구현해놓은 클로저를 이용해서 절댓값 비교와 절댓값이 같을 때 처리만 해주면 된다. 후기 스위프트가 이런거 처리할때는 편리하다. 코드 struct Heap { private var elements: [T] = [] private let sortFunction: (T, T) -> Bool init (sortFunction: @escaping (T, T) -> Bool){ self.sortFunction = sortFunction } var isEmpty: Bool { return self.elements.count == 1 } func leftChild(of index: Int) -> Int { return index * 2 } func rightCh.. 2022. 5. 27.