[백준] 2470 두 용액
·
PS/백준
문제https://www.acmicpc.net/problem/2470입력n: Int = 전체 용액 수 arr: [Int] = 용액 특성 값2 결과ans: (Int,Int) = 두 용액의 합이 0에 가까운 조합해석두 용액이라는 말과 n의 길이가 십만 정도인 걸 보면 정렬 후 투포인터로 찾아가면 될 것 같다 두 용액의 합이 현재 gap보다 작으면 업데이트두 용액의 합이 음수일 경우 left를 오른쪽으로 두 용액의 합이 양수일 경우 right를 왼쪽으로 이동시키면 될 듯하다.코드import Foundationlet n = Int(readLine()!)!let arr = readLine()!.split{$0 == " "}.map{Int($0)!}.sorted()var left = 0var right = n-1..
[백준] 3273 두 수의 합
·
PS/백준
문제https://www.acmicpc.net/problem/3273 입력n = 수열의 길이arr = 수열x = 만들어야하는 목표1 결과ans: Int = ai + aj로 x를 만들 수 있는 쌍의 수해석1. 각각의 숫자의 개수를 카운팅한다.2. x = 5 , arr = [2,2,3,3] 일 때 만들 수 있는 경우의 수는  (2,3) ,(3,2) 2개다  하지만 두개를 같게 보기때문에 1개이다.다시 말하면 식은 다음과 같다   (ans =  \sum_{i = a_{1}}^{a_{n}} \frac{count(i) + count(j)}{2}) 나누기 2를 하는 이유는 (2,3) = (3,2)므로   코드import Foundationlet n = Int(readLine()!)!let arr = readLine..
[백준] 1202 보석 도둑
·
PS/백준
문제https://www.acmicpc.net/problem/1202 입력n = 보석 개수k = 가방 개수 jewels: [(Int,Int)] = (보석의 무게, 보석의 가치)bags: [Int] = 각 가방의 담을 수 있는 최대 무게 1 결과ans: Int = 담을 수 있는 최대 보석 가치해석1. 각 보석과 가방을 무게를 기준으로 오름차순으로 정렬한다.2. 내림차순 힙을 통해 각 가방에 담을 수 있는 최대 가치를 담아 준다.3. 모두 합한다.코드import Foundationstruct Heap { var nodes: [T] = [] var count: Int { return nodes.count } var isEmpty: Bool { re..
[백준] 15486 퇴사 2
·
PS/백준
문제https://www.acmicpc.net/problem/15486 입력n: Int = 남은 근무 일 t: [Int] = 근무 시간p: [Int] = 일급1 결과ans: Int = 퇴사할 때 최대 수익해석점화식은 문제에서 금방 구할 수 있다.dp[i] = i 날까지 왔을 때 최대 수익 j = i + t[i] = 다시 일을 할 수 있는 날 , i = 1이고, t[i] = 1이면 , 다음일은 2일부터 바로 시작할 수 있다. 하지만 여기서 중요한 점은 일을 많이한다고 수익이 최대가 아니다.  그러므로 현재 i날을 기준으로 전날 까지의 최댓값을 계속 가져가야한다. 코드import Foundationvar t: [Int] = [0]var p: [Int] = [0]let n = Int(readLine()!)!f..
[백준] 11722 가장 긴 감소하는 부분 수열
·
PS/백준
문제https://www.acmicpc.net/problem/11722입력n: Int = 수열의 길이arr: [Int] = 수열 1 결과ans: Int = 가장 긴 감소하는 부분 수열 길이해석LIS의 형태로 간단한 점화식을 세울 수 있다. dp[i] = i 전까지 가장 긴 감소하는 부분 수열 길이 반복문 한개는 i = 현재 값 , 나머지 반복문 j = i 직전까지총 최대 1000 x 1000을 돌며  arr[j] > arr[i] 일 때 dp 배열을 갱신한다. 코드import Foundationlet n = Int(readLine()!)!let arr = [-1] + readLine()!.components(separatedBy: " ").map{Int($0)!} var dp: [Int] = [Int](r..
[백준] 1520 내리막 길
·
PS/백준
문제https://www.acmicpc.net/problem/1520 입력n, m = 지도의 행 , 열 길이 arr: [[Int]] = 각 지점의 높이결과ans: Int = 이동 가능한 총 경로 수해석내리막길인지 판별한후 dfs를 통해 목적지에 도달 후 return을 통해 카운팅을 해주자.  코드import Foundationlet nm = readLine()!.components(separatedBy: " ").map{Int($0)!}let (n,m) = (nm[0], nm[1])var arr: [[Int]] = []for _ in 0.. Int { if x == n-1 && y == m-1 { cache[x][y] = 1 return 1 } if..