반응형

Old_SWIFT(221012)/알고리즘이야기 7

백준 시간초과 해결방법

안녕하세요. KataRN입니다. 오늘은 백준 시간초과 해결방법에 대해 알려드리려고합니다. 우선 이 방법은 알고리즘을 사용했음에도 시간초과가 되는 현상의 경우에 사용하시기 바랍니다. 알고리즘을 맞게 썼음에도 시간초과가 되는 경우가 있습니다. 그전에 잠깐! 백준에서 코딩테스트를 하기 위해서는 Command Line Tool을 사용해야합니다. 아래 글을 참고해주세요~(CommandLineTool : https://katarnios.tistory.com/37) import Foundation final class FileIO { private let buffer: Data private var index: Int = 0 init(fileHandle: FileHandle = FileHandle.standardIn..

백준에서 코딩테스트 해보기

안녕하세요. KataRN입니다. 오늘은 백준으로 코딩테스트 해보는법에 대해 알아보겠습니다. 프로그래머스에서는 Playground로 가능했었는데 백준에서 해보려니 안되더라구요... 백준은 Command Line Tools 라는 것을 이용해서 데이터를 입력받고 출력하는 방식을 이용해야합니다. 처음 접하는 사람은 이해하기 힘들지만 천천히 따라해보면 쉽습니다. 오늘도 차례차례 해보도록 합시다. 1. 제일 중요한 단계입니다. Xcode를 실행합니다. 2. Create a new Xcode project로 새로운 프로젝트를 만듭니다. 그리고 macOS에 있는 Command Line Tool을 선택합니다. - Swift언어로 만들어줍시다! 3. 자 이제 준비는 다 되었습니다. 이걸 어떻게 쓰는지 추가 설명을 드리겠습..

우선순위 큐, 힙 구현하기

안녕하세요. KataRN입니다. 오랜만에 글을 쓰네요. 오늘은 우선순위 큐, 힙에 대해 알아보겠습니다. 오늘도 차례차례 알아볼게요. 1. 큐란 무엇일까요? 먼저 들어간 데이터가 먼저 나가는 데이터구조를 큐(Queue)라고 하죠. 2. 우선순위 큐란 무엇일까요? 우선순위 큐는 먼저 들어간 데이터가 먼저 나가는 것이 아닌 우선순위가 높은 순서대로 데이터가 나가는 것을 우선순위 큐(Priority Queue)라고 합니다. 3. 힙이란 무엇일까요? 힙(Heap)은 우선순위 큐를 위해 고안된 완전이진트리 형태의 자료구조입니다. 여러 개의 값 중 최댓값 또는 최솟값을 찾아내는 연산이 빠르다. (우선순위가 최대이면 최댓값, 최소이면 최솟값입니다.) 4. 이것을 왜 알아야하나? 단순하게 알고리즘에서 최대값 최소값을 구..

최단거리 구하기 <다익스트라(Dijkstra)>, <플로이드 워셜(Floyd Warshall)>

안녕하세요. KataRN입니다. 항상 글을 써야지... 써야지... 하면서 미루게 되네요.. 크흠... 오늘은 최단 거리를 구하는 알고리즘에 대해 써보려고 합니다. 저는 최단거리하면 6칸이면 aaa와bb로 나눠서 3! * 2! 했던 생각이 나네요... 하지만 이걸로는 풀수가 없었습니다... 흑흑... 자 우리는 이제 다음 단계로 넘어가봅시다. 우선 최단거리와 관련된 알고리즘이 2가지가 있습니다. 1. 다익스트라(Dijkstra) 2. 플로이드 워셜 알고리즘(Floyd Warshall Algorithm) 오늘은 2가지 모두 소개하려고합니다. 1. 다익스트라(Dijkstra)란? - 음의 가중치가 없는 그래프의 한 정점(頂點, Vertex)에서 모든 정점까지의 최단거리를 각각 구하는 알고리즘(최단 경로 문제..

DP(동적계획법)

안녕하세요. KataRN입니다. 오늘은 DP에 대해 알아보겠습니다. DP란 탈영병들을 잡는 병사들을 일컫는... 죄송합니다. DP(Dynamic Programming)란 ? 일반적으로 주어진 문제를 풀기 위해서, 문제를 여러 개의 하위 문제(subproblem)로 나누어 푼 다음, 그것을 결합하여 최종적인 목적에 도달하는 것이다. 각 하위 문제의 해결을 계산한 뒤, 그 해결책을 저장하여 후에 같은 하위 문제가 나왔을 경우 그것을 간단하게 해결할 수 있다. 이러한 방법으로 동적 계획법은 계산 횟수를 줄일 수 있다. 특히 이 방법은 하위 문제의 수가 기하급수적으로 증가할 때 유용하다. 출처 : 나무위키 핵심은 저장입니다. Memoization(메모이제이션)이라고 불리기도합니다. 동일한 계산을 반복해야할 때,..

DFS, BFS에 대해 알아봅시다.

안녕하세요. KataRN입니다. 오늘은 DFS, BFS에 대해 알아보겠습니다. DFS : Depth First Search(깊이 우선 탐색) weigh을 가지지 않는 방향 그래프에서 모든 경우를 구해볼 때 이 DFS를 사용됩니다. 예를 들면 1부터 N까지의 자연수 중 n개의 집합을 만들 수 있을 때, 가능한 모든 순열을 구해야 할 때 사용할 수 있습니다. 스택을 통해 구현하며, 재귀함수를 통해 구현합니다.(함수가 호출되면 스택 영역에 쌓이게 된다. 효율성이 떨어지는 이유) 코드로 확인해 볼게요. func practiceDFS(numbers: [Int], m: Int) { // 1. 궁극적으로 구하고자 하는 값. 재귀 함수의 외부에 선언되었다. 재귀 함수를 돌며 특정 기준에 만족할 경우 이 값을 변경할 것..

재귀함수, 꼬리재귀

안녕하세요. KataRN입니다. 여러분 재귀함수를 아시나요? 재귀함수... 어렵게 생겼지만 어렵지 않습니다. 재귀함수에 대한 이해를 돕기위해 우선 나무위키에서 퍼온 내용을 보시죠 어떻습니까? 멀티탭을 사용하기위해 멀티탭에 멀티탭코드를 꽂아서 사용하는... 멀티탭을 쓰기위해 멀티탭을 통해 전기를 가져오고 그 전기는 멀티탭에서 그 멀티탭의 전기는 멀티탭에서... 도르마무... 거래를 하러왔다... 하하..다시 이야기로 돌아가서 멀티탭을 사용하기 위해.. 도르마무... 죄송합니다. 다른 내용을 보도록하죠. 결과를 얻기위해 함수속에 함수(자신)을 넣는 것입니다. 가장 쉬운 예제는 팩토리얼입니다. 함수로 예를 들겠습니다. import Foundation func factorial(_ n : Int) -> Int ..

반응형