문제 소개https://www.acmicpc.net/problem/2580 스도쿠를 채우는 문제이다. 문제 풀이스도쿠에서 빈칸을 저장한뒤 그 빈칸에 하나하나 입력해주고, 결과가 나오면 exit(0) 를 통해서 값을 내보낸다.import Foundation var sudoku = [[Int]]() var blank = [[Int]]() // 입력 받기 for _ in 0..
→ Problems
문제 소개https://www.acmicpc.net/problem/9663 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 유명한 문제이다. 문제 풀이유명한 문제여서 아주 유명한 풀이가 있다. 이 문제는 사실 어렵지는 않지만 시간복잡도를 최대한 줄이는 것이 관건이라고 할 수 있겠다. 가장 유명한 풀이는 아래와 같다. 한 줄에 무조건 퀸 하나가 들어가야 하기 때문에 한줄한줄 넘어가면서 퀸을 놓는 방식이다. 그리고 colums라는 배열에 쌓아준다. 그리고 퀸을 놓을 때 같은 줄에 있는지, 대각선이라면 x, y 좌표의 차이가 같을 경우인지를 판별한 뒤 넣는다.import Foundation let n = Int(readLine()!)! var colums = Arra..
문제 소개행렬을 뒤집어서 A, B를 같게 만드는 문제이다. 문제 풀이행렬 A, B 를 입력받고 다른 부분을 1로 하는 새로운 diff 행렬을 만든다. 배열을 순회하면서 1이 있으면 행렬을 뒤집는다. 행렬을 뒤집을때마다 count를 세고, 만약 남은 diff 행렬에 1이 남아있을때 -1을 출력하고 diff 행렬이 모두 0이면 count를 출력한다.import Foundation let nm = readLine()!.split(separator: " ").map { Int($0)! } let (n, m) = (nm[0], nm[1]) var a = [[Int]]() var b = [[Int]]() // A, B 행렬 입력 for _ in 0..
문제 소개문제 풀이깊이우선탐색(dfs)을 활용하여 최댓값을 출력하였다.import Foundation let n = Int(readLine()!)! let weights = readLine()!.split(separator: " ").map { Int($0)! } var maxValue = 0 func dfs(_ current: Int, _ weights: [Int]) { if weights.count == 2 { maxValue = max(maxValue, current) } for i in 1..
문제 소개 문제 풀이우선 queue를 사용하였는데 removeFirst()를 사용하지 않고 index를 조절하여 queue를 관리했다. bfs로 푼 이유는 dfs로 끝까지 하는 것보다 최솟값을 찾기에는 bfs가 효과적이다. 나머지는 구현의 문제였다.import Foundation let nm = readLine()!.split(separator: " ").map { Int($0)! } let (n, m) = (nm[0], nm[1]) var map = [[String]]() var coins = [[Int]]() for i in 0.. Bool { return o[0] >= 0 && o[0] = 0 && o[1] ..
문제 소개주어진 배열의 부분수열중 원하는 값을 만족하는 부분수열의 갯수를 구하는 문제이다.문제 풀이부분수열의 합을 저장하고 합이 s와 같다면 count를 올려준다. 고려 사항 1. 처음에 0으로 시작하기 때문에 start라는 변수를 넣어서 dfs함수가 최소 한번은 실행되어야 current == s 조건을 확인하도록 설정했다. 2. current == s 일 경우 바로 return 했는데, 만약 부분수열중에 -1, +1 처럼 0이 되는 요소들이 뒤에 있다면 그것도 고려해야하기 때문에 return을 없애주었다.import Foundation let ns = readLine()!.split(separator: " ").map { Int($0)! } let (n, s) = (ns[0], ns[1]) let in..
문제 소개숫자의 배열과 연산기호의 배열을 주면 이를 통해 가장 큰 값, 작은 값을 찾는 문제이다.문제 풀이순서대로 연산을 해주기 때문에 dfs로 앞에서부터 처리하면 되겠다라고 생각했고, 결과는 20ms 로 매우 빠르게 결과값을 얻을 수 있었다. 모든 경우의 수를 계산해준 뒤 maxValue, minValue 를 업데이트 시켰다.import Foundation let n = Int(readLine()!)! let nums = readLine()!.split(separator: " ").map { Int($0)! } let operation = readLine()!.split(separator: " ").map { Int($0)! } var maxValue = -1_000_000_000 var minValu..
문제 소개https://www.acmicpc.net/problem/1339예를 들면 GCF + ACDEB 일 때 A부터 G까지 숫자를 부여한뒤 GCF + ACDEB 의 최댓값을 구하면 되는 문제이다. 문제 풀이GCF + ACDEB 의 경우 각 번호에 1을 부여한다고 생각해 보면 아래와 같이 값이 나오게 되고, 높은 값부터 9를 부여해 주면 된다.dictionary 로 데이터를 쌓아주고, 이것을 nums에 넣어준 뒤 높은 숫자부터 9부터 순서대로 곱해주면서 더하면 최댓값을 구할 수 있다.import Foundation let n = Int(readLine()!)! var dict = [String: Int]() for _ in 0..) for i in nums.indices { answer += nums[..