- [ 코딩테스트/프로그래머스 ][프로그래머스] 타겟 넘버(Swift)2024-08-22 16:45:45난이도: Level 2 사용 알고리즘: DFS index를 돌면서 모든 경우의 수들 중 sum이 target과 일치하면 되는 문제였다.그림(못남)처럼 dfs로 모든 경우의 수를 따라가도록 하였다. import Foundationfunc solution(_ numbers:[Int], _ target:Int) -> Int { var count = 0 func dfs(idx: Int, sum: Int) { if idx == numbers.count && sum == target { count += 1 return } if idx + 1
- [ 코딩테스트/백준 ][백준/BOJ] 1520번 내리막 길(Swift)2024-08-18 21:22:15문제 난이도: 골드 3 사용 알고리즘: DFS, DP M,N은 각각 500 이하이고 최대 250,000까지 연산이 필요하다.제한 시간은 2초이므로 200,000,000번(2억번)의 연산이 넘어가게 되면 시간초과가 된다. 대충 O(N^4)을 넘지 않으면 시간초과는 뜨지 않는다. 첫번째 풀이는 DFS에 백트래킹을 적용해서 문제풀이를 진행했다.다만 백트래킹을 적용하게 되면 셀의 모든 방향에 대하여 재귀 호출이 발생하여 시간초과가 뜬다.import Foundationlet size = readLine()!.split(separator: " ").map { Int($0)! }let y = size[0]let x = size[1]var map: [[Int]] = []var visited = Array(repeati..
- [ 코딩테스트/백준 ][백준/BOJ] 2468번 안전 영역(Swift)2024-08-15 22:24:57문제 난이도: 실버 1 사용 알고리즘: DFSimport Foundationlet n = Int(readLine()!)!var map: [[Int]] = []var heights = Set()var sortedHeights = [Int]()let directions = [(0, -1), (0, 1), (-1, 0), (1, 0)]var visited = Array(repeating: Array(repeating: false, count: n), count: n)var mapCount = 0var result = 0for _ in 0 ..= n || y = n || map[y][x] i { dfs(x: x, y: y, height: i) mapCoun..
- [ 코딩테스트/백준 ][백준/BOJ] 11725번 트리의 부모 찾기 (Swift, 스위프트)2024-08-11 19:01:48문제 난이도: 실버 2 사용 알고리즘: DFSimport Foundationlet vertexCount = Int(readLine()!)!var injacent: [[Int]] = Array(repeating: [], count: vertexCount + 1)var parent: [Int] = Array(repeating: 0, count: vertexCount + 1)var visited: [Bool] = Array(repeating: false, count: vertexCount + 1)for _ in 0 .. 인접 리스트로 우선 각각 연결된 노드들을 저장했다. [[], [6, 4], [4], [6, 5], [1, 2, 7], [3], [1, 3], [4]] 1 - 6,42 - 43 - 6,54- 1..
- [ 코딩테스트/백준 ][백준/BOJ] 1987번 알파벳 (Swift 스위프트)2024-08-11 18:38:17문제 난이도: 골드 4 사용 알고리즘: DFS, 백트래킹 Set을 통해 한번 방문한 알파벳을 저장해놨다.Set은 중복값이 없기 때문에 이럴 때 유용한 것 같다. 아무튼 코드 자체는 기존 dfs와 다를게 없지만, visited.remove를 통해서 방문했던 곳은 다시 삭제해주는 코드로 짜주었다.방문한 알파벳을 지워주지 않으면, direction의 순서에 따라서 먼저 들어간 곳에 따라서 최대치가 바뀌기 때문에 모든 경로를 파악하여 맥스값을 프린트해주는 방법밖에 없었다.import Foundationlet rc = readLine()!.split(separator: " ").map { Int($0)! }let r = rc[0]let c = rc[1]var map: [[String]] = []var visite..
- [ 코딩테스트/백준 ][백준/BOJ] 10026번 적록색약 (Swift 스위프트)2024-08-08 14:24:40문제 난이도: 골드 5 사용 알고리즘: DFS 처음 제시한 맵과 적록색약 맵 두 개를 만들었다. 각 맵은 아래와 같이 만들어진다. map =[["R", "R", "R", "B", "B"], ["G", "G", "B", "B", "B"], ["B", "B", "B", "R", "R"], ["B", "B", "R", "R", "R"], ["R", "R", "R", "R", "R"]] rgMap =[["G", "G", "G", "B", "B"], ["G", "G", "B", "B", "B"], ["B", "B", "B", "G", "G"], ["B", "B", "G", "G", "G"], ["G", "G", "G", "G", "G"]] dfs를 통해 일치하는 색상만 탐색하여 dfs를 돌린 횟수를 기록하였다. ..
- [ 코딩테스트/백준 ][백준/BOJ] 11724번 연결 요소의 개수 (Swift 스위프트)2024-08-07 18:46:56문제 난이도: 실버 2사용 알고리즘: DFS Int 이중 배열을 통해 외부 배열은 정점의 위치를,내부 배열은 해당 정점과 연결된 정점들을 저장한다. 예제 입력 1을 넣게 되면graph는 [[], [2, 5], [1, 5], [4], [3, 6], [2, 1], [4]]이 된다. 1번 정점에 연결된 정점은 2, 52번 정점에 연결된 정점은 1, 53번 정점에 연결된 정점은 44번 정점에 연결된 정점은 3, 65번 정점에 연결된 정점은 2, 16번 정점에 연결된 정점은 4 여기서 연결 요소는 [1, 2, 5], [3, 4, 6]으로 총 2개이다.import Foundationlet input = readLine()!.split(separator: " ").map { Int($0)! }let n = input..