⭐️ Computer Science/PS

    [PS] DP - LIS 11053 가장 긴 증가하는 부분수열

    // LIS DP 공식 let n = Int(readLine()!)! let aList = readLine()!.split(separator: " ").map { Int($0)! } var dp = Array(repeating: 1, count: n) // 배열을 순회하면서 각각의 인덱스를 비교해서 어떤 기준값보다 큰 값이 있으면 기준값을 수정해주는 과정 for i in 1..

    [PS] 백트래킹 9663번 N-Queen 답지 참고

    [PS] 백트래킹 9663번 N-Queen 답지 참고

    https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 처음 풀이 let n = Int(readLine()!)! var cnt = 0 var graph = Array(repeating: 0, count: n) func checkQueen(row: Int) -> Bool { for i in 0.. 한정조건 func checkQueen(row: Int) -> Bool { for i in 0..왼쪽 대각선을 고려해서 문제를 풀이했다... 이 방법이 더 어려운 것 같은데....

    [PS] 백트래킹 - n과m(11) (12), 부분수열의 합 1182

    import Foundation let nm = readLine()!.split(separator: " ").map { Int($0)! } let n = nm[0] let m = nm[1] let num = readLine()!.split(separator: " ").map { Int($0)! }.sorted() var output = Array(repeating: 0, count: m) func backtrack(_ index: Int) { if index == m { print(output.map { String($0) }.joined(separator: " ")) return } var used = Set() // 똑같은 조합을 체크하기 위한 집합 for i in 0.. backtracking마다 ..

    [PS] 백트래킹 - n과m(9) 15663 어려움 시간초과 이슈 악

    15663 (9) 시간초과 이슈 8개 중 8개를 고를 수 있어서 8^8 시간복잡도인데 내가 푼 방식은 contains 부분에서 시간복잡도가 추가로 증가하게 된다. 그래서 시간초과 이슈가 생긴다.import Foundation let nm = readLine()!.split(separator: " ").map { Int(String($0))! } let n = nm[0] let m = nm[1] var array = readLine()!.split(separator: " ").map { Int(String($0))! }.sorted(by:

    [PS] 백트래킹 20문제 풀기 - 0. 개념, 1. n과m(1) ~ (4)

    [PS] 백트래킹 20문제 풀기 - 0. 개념, 1. n과m(1) ~ (4)

    앞으로 4/17~23 이번주는 백트레킹 문제만 조지기로 다짐했다. 이번주 20문제를 풀고 익혀보자. 이번주 헤치울 문제들 https://www.acmicpc.net/step/34 백트레킹 개념 정리 모든 경우의 수를 전부 고려하는 알고리즘으로 답이 될 수 없는 후보는 더이상 탐색하지 않고 다시 돌아가는 알고리즘 모든 경우의 수를 전부 다 고려하는 브루트포스 (완전탐색)보다 더 시간을 절약할 수 있다. 완전탐색의 대표적인 방법 중 하나가 DFS로, 재귀를 이용해서 현재시점에서 방문할 곳을 탐색하고 방문한다. 반면, 백트래킹은 비효율적인 경로를 차단하고 목표지점에 도달할 수 있는 가능성이 존재하는 곳만 탐색해서 가지치기라고 부른다. 백트레킹은 BFS나 DFS와 함께 구현한다. 그러나 해당 노드가 조건에 부합..

    [PS] BOJ - 7576 토마토 골드5

    [PS] BOJ - 7576 토마토 골드5

    처음에 파이썬으로 풀었던 문제라 swift로 바꾸는 것은 쉽지 않았는데 시간초과 문제가 발생했다. 파이썬은 큐 라이브러리를 제공해주는 점과 다르게 swift는 큐가 제공되지 않는데 그 과정에서 removeFirst를 쓰는 부분이 문제였다. 맨 앞 요소를 삭제하면 각 요소들이 하나씩 앞으로 이동하는데 그러면 시간복잡도가 O(n)으로 시간초과가 발생하게 된다. 그러면 어떻게 해야 하냐? 기존에 removeFirst를 통해서 가장 맨 앞 요소를 삭제하고 -> 인덱스가 하나씩 당겨졌을 것이다. 이 대신에 index를 통해서 큐의 원소에 접근하는 방법을 사용하면 된다. index는 0부터 시작이고, queue.count는 1부터 개수를 센다. 그래서 index가 더 커지는 while문을 벗어나는 방식으로 구현해주..

    [PS] 3/2 - BOJ 2644 촌수계산 - DFS

    [PS] 3/2 - BOJ 2644 촌수계산 - DFS

    https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 나는 촌수계산하려면 각각 노드 간 깊이를 계산해줘야 되니까 DFS가 먼저 떠올랐는데 다른 사람들은 BFS로 풀었다고 한다. 왜 BFS라고 생각을 했을까? DFS랑 풀이법은 비슷한데 큐에 튜플을 통해서 (시작노드, cnt)를 넣어준 것이 BFS 특징 이렇게도 풀 수 있다는 걸 익혀야겠다. 우선, 하나씩 x = 7인 경우부터 노트에 다 그려보면서 이해를 했다. depth의 경우, ..