일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 알고리즘
- Util
- Queue
- dp
- PriorityQueue
- Main
- GREEDY
- Kotlin
- Recursion
- lastIndex
- contentToString
- indices
- Poll
- Developer
- intarray
- solution
- 프로그래머스
- 2D Array
- Java
- programmers
- heap
- dynamic programming
- booleanarray
- hackerrank
- foreach
- 동적계획법
- 2020
- report
- sortedBy
- 코틀린
- Today
- Total
목록알고리즘 (7)
Code in
이진 탐색 Binary Search 이진 탐색은 한번 비교를 할 때마다 탐색 범위가 절반으로 줄어든다. 정렬된 배열을 전제로 탐색한다. 1 3 5 7 9 11 13 위와 같은 정렬된 배열에서 Binary Search 이진 탐색을 적용하여 9 를 탐색하는 경우를 생각할 수 있다. 정렬된 배열의 중앙 요소를 선택한다. 선택된 값과 찾고자 하는 값을 비교하여 왼쪽 혹은 오른쪽 중 어느 방향으로 탐색을 진행할지를 정한다. 위의 과정을 반복한다. 남은 탐색 값은 9가 남고, 찾고자 하는 값과 일치하므로 탐색을 끝마친다. 이진 탐색 성..
프로그래머스 깊이/너비 우선 탐색 타깃 넘버 문제입니다. IntelliJ에서의 풀이입니다. val numbers: IntArray = intArrayOf(1, 1, 1, 1, 1) val target: Int = 3 fun solution(numbers: IntArray, target: Int): Int { val arr: ArrayList = ArrayList() recursion(0, numbers, numbers[0], target, arr) recursion(0, numbers, numbers[0]*-1, target, arr) return arr.size } fun recursion(curIndex: Int, numbers: IntArray, curNum: Int, target: Int, arr..
깊이 우선 탐색 DFS, 너비 우선 탐색 BFS에 앞서서 사용되는 자료구조인 그래프에 대해서 알아보겠습니다. 그래프 노드 Node와 노드를 연결하는 간선 Edge을 하나로 모아놓은 비선형 자료구조 연결된 객체 간의 관계를 표현하는 자료구조 정점 vertex와 간선 edge로 이루어진 자료구조 G = (V, E) 흔히 이야기하는 트리 구조는 조건들이 추가된 그래프의 일종입니다. 그림과 같이 표시된 방향이 없는 무방향 그래프도 있지만, 방향이 표기된 방향 그래프도 존재합니다. 그래프 탐색 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것입니다. 깊이 우선 탐색 DFS와 너비 우선 탐색 BFS도 그래프 탐색의 한 종류입니다. 두 방식 모두 그래프 G = (V, E)의 모든 간선을 조회하..
프로그래머스 탐욕법 부분 조이스틱 문제입니다. IntelliJ에서의 풀이입니다. import kotlin.math.abs val name: String = "BBAABB" // 'A': 65 ~ 'Z': 90 // A B C D E F G H I J K L M N O P Q R S T U V W X Y Z // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 12 11 10 9 8 7 6 5 4 3 2 1 fun solution(name: String): Int { var answer = 0 // 알파벳을 바꿀 때 최적화, 이동할 때 최적화 2개로 나누겠습니다. // 알파벳 변경 시의 최적화 var current: Int name.forEach { current = it.toInt() answe..
완전 탐색 알고리즘 - Brute Force : 모든 경우의 수를 확인하여 답을 찾아내는 알고리즘. BF는, 모든 경우의 수를 확인하기 때문에 성공하면 100% 정확한 답을 찾아낼 수 있다. 만들기가 비교적 쉽고 병렬 작업이 가능하다는 장점을 가지고 있지만, 시간적인 측면에서는 비효율적이라는 단점을 가지고 있다. 탐색해야 할 요소들이 많은 경우에는 보다 효율적인 방법을 찾아서 사용하는 것이 좋겠지만, 개수가 정해져 있거나 적은 경우에는 완전 탐색을 사용하여 보다 쉽고 정확하게 답을 구할 수 있다. 완전 탐색을 구현하기 위해서는, 1. 반복문을 사용하거나 (for, while) 2. 재귀 함수를 사용할 수 있다. (return function / 같은 함수 호출의 반복) 재귀 함수의 경우, 더 이상 함수를..
프로그래머스 완전 탐색 부분 카펫 문제입니다. IntelliJ에서의 풀이입니다. val brown: Int = 24 // 최소 8 val yellow: Int = 24 // 최소 1 fun solution(brown: Int, yellow: Int): IntArray { var answer = intArrayOf() // brown = 2*(가로+세로 - 2) yellow = 가로*세로 - brown // (가로+세로) = brown/2 + 2 // 가로*세로 = brown + yellow val mul: Int = brown + yellow val sum: Int = brown / 2 + 2 // 가로 = mul/세로 // 가로+세로 = sum var height = 3 // 최솟값 while (mul..
프로그래머스 완전탐색 부분 모의고사 문제입니다. IntelliJ에서의 문제 풀이입니다. val operations: IntArray = intArrayOf(1, 3, 2, 4, 2) fun solution(answers: IntArray): IntArray { var answer = intArrayOf() var a: Int = 0 // 맞은 개수 count var b: Int = 0 var c: Int = 0 val aa: IntArray = intArrayOf(1, 2, 3, 4, 5) // 답안지 val bb: IntArray = intArrayOf(2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5) val cc: IntArray = intArrayOf(3, 3, ..