🐣/Algorithm(25)
-
[종만북] Brute Force / 무식하게 풀기
Algorithmic Problem Solving Strategies 개인적으로 읽고 정리한 요약 입니다. 아래 링크에 문제 풀이 예제가 있습니다. GitHub - chanheki/AlgorithmicProblemSolvingStrategies: Algorithm Book Study Algorithm Book Study. Contribute to chanheki/AlgorithmicProblemSolvingStrategies development by creating an account on GitHub. github.com 무식하게 풀기 도입 문제를 처음 볼때 가장 먼저 스스로에게 물어볼 것. 무식하게 풀 수 있을까 ? 무식하게 푼다 == Brute Force 컴퓨터의 빠른 계산 능력을 가능한 경우..
2023.03.15 -
[Swift] BackTracking / 백트래킹 / 퇴각검색
BackTracking / 백트래킹 / 퇴각검색 여러 후보 해 중에서 특정 조건을 충족시키는 모든 해를 찾는 알고리즘. 해를 찾는 도중 막히면 돌아가 다시 해를 찾아간다. 1. 해를 찾아가는 과정은 '루트'에서 부터 시작. (루트 또한 하나의 부분해) 2. 현재 위치한 부분해에서 선택이 가능한 다음 부분해의 목록을 얻음. 3. 2 에서 얻은 목록의 부분해들을 하나씩 방문. 4. 방문한 부분해가 요구하는 조건을 만족시키면 그 자리에서 2, 3 과정을 수행하고, 그렇지 않으면 그 이전 부분해로 돌아 나와 다른 부분해를 시도. 5. 최종해를 얻을 때까지, 또는 모든 경우의 수를 확인해도 해가 없음을 확인했을 때 까지 2,3,4 과정을 차례대로 반복.
2023.02.28 -
[Swift] Breadth-First Search / BFS
BFS (Breadth-First Search) 인접한 노드를 먼저 탐색하는 방식. O(Vertex+Edge) A→B→C→D→E→F→G→H 해당하는 그래프는 아래와 같이 인접 리스트로 나타낼 수 있다. let graph: [String: [String]] = [ "A" : ["B", "C"], "B" : ["A", "D", "E"], "C" : ["A", "F", "G"], "D" : ["B"], "E" : ["B", "F", "H"], "F" : ["C", "E", "G"], "H" : ["E"] ] 너비 우선 탐색은 보통 두 개의 큐로 구현 방문 해야하는 needVisitQueue 방문 한 노드를 저장하는 visitedQueue 1. 처음으로 탐색할 노드의 데이터를 needVisitQueue에 삽입...
2023.02.27 -
[Swift] 진수 변환
radix 사용 변환 var n = "A" var hToD = Int(n, radix:16)! print(hToD) // MARK: - radix var decimal = 12345 let dToB = String(decimal, radix: 2) print(dToB) 반복문 사용 변환 // MARK: -interactive var interactiveNumberArray: Array = [] while (decimal != 0){ interactiveNumberArray.append(decimal % 2) decimal = decimal / 2 } print(interactiveNumberArray.reversed().map{String($0)}.reduce("", +)) 재귀 사용 변환 // MARK..
2022.06.14 -
[Swift] 에라토스테네스의 체를 사용한 소수 찾기 / 소수 찾기 / 소수 / Prime number / Prime
1. 해당 숫자까지 모든 숫자를 다 넣어 배열을 초기화 합니다. 2. 해당 숫자까지 배수가 있는 경우 0으로 삭제시켜줍니다. 3. 남아있는 숫자들이 소수 var num = 100000 // 원하는 숫자의 범위 var numArray = Array(repeating: 0, count: num + 1) for i in 2...num { numArray[i] = i } for i in 2...num { if numArray[i] == 0 { continue } for j in stride(from: i+i, through: num, by: i) { numArray[j] = 0; } } for i in 2...num { if numArray[i] != 0 { print(numArray[i], terminator..
2022.05.07