본문 바로가기

Algorithm/문제풀이_백준196

[Swift][투포인터] 백준 3273번 (두 수의 합) 요구능력 투 포인터 문제풀이 이전의 수고르기에서는 두 수의 차를 구하는것이었다. 그래서 기존에 내가하던 방식의 투포인터로 맨앞에서부터 start와 end를 함께 올려갔는데, 이 문제의 경우에는 합을 구하는거라 위에 방식대로하면 합이 계속해서 커질 수 밖에 없기 때문에 비교가 되지 않는다. 그래서 맨앞쪽과 맨뒤쪽에 포인터를 두고 비교를 해주었다. 후기 투포인터는 유형이 다양한거같다. 코드 let n = Int(String(readLine()!))! var arr = readLine()!.split(separator: " ").map{Int(String($0))!}.sorted() let x = Int(String(readLine()!))! var left = 0 var right = n - 1 var re.. 2022. 5. 31.
[Swift][누적합] 백준 10986번 (나머지 합) 요구능력 누적합, 수학 문제풀이 아래 코드에 빗대어 우리가 구하려는 구간의 누적합이 (i + 1)부터 (j)까지라면 preFix[j] - preFix[i]가 구간합이 될것이다. 문제에서 연속된 부분의 구간합이 M으로 나누어 떨어지는 구간의 개수를 출력하라고 했으므로, 우리가 구해야 하는것은 (preFix[j] - preFIx[i]) % m = 0 이다. 여기서 모듈러의 연산을 활용해야 하는데, (preFix[j] % m) - (preFix[i] % m) = 0 로 분배하고, (preFix[j] % m) = (preFix[i] % m) 가 된다. 그래서 누적합을 구하면서 count[나머지] += 1을 통해 누적합 % m의 개수를 저장해준다. 개수를 저장해주는 이유는 이 갯수를 통해 조합을 이용하기 위해서이.. 2022. 5. 30.
[Swift][누적합] 백준 16139번 (인간 - 컴퓨터 상호작용) 요구능력 누적합, ascii 문제풀이 알파벳마다 알파벳갯수의 누적 배열을 dictionary에 저장해주었다. 알파벳만큼 for문을 돌리고, 현재 문자열의 위치의 알파벳과 내가 저장하려는 알파벳을 비교하기위해 character -> ascii로 변경해주었다. dictionary에 저장할 때는 다시 알파벳문자형태로 저장해줬다. 후기 누적합의 개념을 알고 알파벳관련된건 ascii코드로 변경해서 푸는문제가 많다는걸 안다면 간단히 풀리는 문제같다. 코드 import Foundation var arr = Array(String(readLine()!)) var q = Int(String(readLine()!))! var dict = [String: [Int]]() for i in Character("a").ascii.. 2022. 5. 30.
[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.