728x90

Algorithm 6

[LEETCODE - 15] Container With Most Water 풀이

문제파악 문제는 그래프 내에서 높이(height) 를 알수 있는 배열 `heights` 가 주어졌을때, 위 그림과 같이 주어진 그래프에서 가장 많은 물을 차지할수 있는 컨테이너를 찾는 것 이다. 일단 가장 간단하게 생각해보았을때, 물의 면적을 구하는 공식은 아래와 같이 구할수 있을 것 이다. Calculate Volume Using MathJax 컨테이너의 용량구하기 공식: \( \text{Volume} = \text{Width} \times \text{Height} \) ">HTML 삽입미리보기할 수 없는 소스생각해보면 우리는 이미 받은 height 배열을 통해 그래프내 막대들의 높이는 이미 알고 있는 상태이다.heights = [1,8,6,2..

Algorithm 2024.11.06

Algorithm 을 왜 공부해야 할까?

"들어가기 앞서 이 글은 취준 / 면접시 알고리즘을 봐야 하나? 라는 토픽과는 전혀 무관하다. 난 단순히 엔지니어링 측면에서 알고리즘의 중요성에 대한 내 생각을 적어보려고 한다" 최근 알고리즘 문제 풀이에 재미를 느끼고 있는데 Leetcode 문제 풀이를 하던 중, 여러 배열의 문자들의 combination 을 어떻게 구성해야 할까? 라는 고민이 생겼다. 예를 들면 아래와 같은 상황이라고 가정해보자. 이 아티클에서 구현 Level 의 언어는 Python 을 이용하려고 한다. Kotlin 으로 구현해버리면, Kotlin 을 모르는 사람은 알기 힘든 경우도 종종 있어서, 내 생각에 psuedo code 에 비슷하게 구현가능 한 언어인 Python 을 선택했다. 위와 같은 상황에서 a 와 b 배열을 한단어씩 ..

Algorithm 2022.09.12

Coding Interview - 1

Coding Interview - 1 문제 정수 배열 a 와 b 가 주어졌을때, a 와 b 에서 각각 하나씩 집은 뒤 더해서 v 를 만들 수 있으면 true 를 리턴하고, 아니면 false 를 리턴해라 ## CASE1 a = [1, 2, 3] b = [10, 20, 30, 40] v = 42 ## CASE2 a = [0,0,-5,30212] b = [-10, 40, -3, -9] Solution (Brute-Force) fun solution(a: IntArray, b: IntArray, v: Int): Boolean { for (firstNum in a) { val meetsCondition = v - firstNum for (secondNum in b) { if (meetsCondition == se..

Algorithm 2022.08.30

HashTable vs Binary Search Tree

HashTable vs Binary Search Tree Criteria Binary Search Tree HashTable Time Complexity(Insertion / Deletion / Searching) O(nlogN) O(1) Sorted Order 데이터가 삽입시 부터 정렬되어 있음. 중위 순회를 하면 정렬된 데이터가 나옴. 데이터가 랜덤한 형태로 저장되어 있음(해시값 이용). 만약 Sort 하려면 추출해서 Sort 해야함 Hash Function X O(1) 시간에 수행하기 위해서는 적절하게 키를 생성해내는 Hash Function 이 필요 Collsion X 충돌 발생시 Chaining 이나, Open Address 방법을 이용 Input Data Size 딱히 Input Size 를 ..

Algorithm 2022.08.27

TDD 로 알고리즘 풀이

TDD 테스트 주도 개발 (Test Driven Development) 로 기능에 대한 테스트를 먼져 작성한 뒤 테스트가 통과할 수 있는 코드를 작성하는 것을 뜻한다. 예전에는 이러한 방법이 단순히 더 느리다고만 생각했는데, 요즘 드는 생각은 TDD 로 하는 방법이 일반 방법보다 때로는 빠를때도 많다는 것이 내 의견이다. 사람들이 TDD 책을 읽지 않고 단순히 테스트 먼져 적으면 되는거 아니야? 라고 해서 TDD 를 시작하게 되면 당연하게도 TDD 가 느리네 라고 생각할 수 밖에 없다. 그래서 켄트백과 최범균님의 책을 읽고나서 내가 느낀 경험을 바탕으로 TDD 를 하는 방법을 적어보려고 한다. Know-how 일단 켄트백의 TDD 책을 읽어보면 테스트를 쉽게 할 수 있는 작은 기능을 찾는게 가장 중요하다..

Algorithm 2022.08.22

병합정렬(Merge Sort)

병합정렬 Merge Sort 는 Java Collection API 에서도 사용하는 것으로 알고있을 정도로 안전하다. 가끔 왜 Quick Sort 를 쓰지않고, Merge Sort 를 사용하여 구현하는 것에 대한 이야기가 있는데 Quick Sort 를 구현해봤다면 Quick sort 는 stability 하지 않다는 것을 알것이다. 따라서 충분히 objcet 의 경우에 sort 에서 순서가 뒤바뀌는 현상을 경험하기 충분하며 그로인한 사이드 이펙트를 유발할 수 있다. 일단 이 얘기는 뒤로하고 알고리즘에 대해 알아보도록 하자. 도식 나는 이런 Recursive 하게 짜야되는 Algorithm 을 작성할때는 항상 도식을 그리는 편이다. 그래야 Call Stack 생각도 잘나고, 코드도 잘 작성되는 것 같다. ..

Algorithm 2022.07.13
728x90