들어가며 이진 탐색은 예전에 맛보기로 공부했던 적이 있었기도 하고 크게 어려운 개념이 아니라 이해하기 쉬웠다. 늘 말하듯이 구현은 다른 문제지만. 오늘의 TIL은 이진 탐색의 개념을 정리해보고자 한다! 이진 탐색 이진 탐색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 출처 - 위키백과 이진 탐색(Binary Search)은 그림에서 보는 것처럼 중앙값을 기준으로 절반 씩 줄여나가면서 목표값을 찾아가는 알고리즘이다. 단, 이진 탐색을 하기 위해서는 자료가 순서에 따라 정렬되어 있어야 한다. 만약 정렬되어 있지 않은 자료에서 이진 탐색을 한다고 하면, 중앙값 기준으로 좌/우가 무조건 작거나 크다고 보장할 수 없기 때문이다. 이진..
알고리즘
들어가며 TIL을 쓰려고 보니 새삼 벌써 항해99에 승선한 지 19일 밖에 지나지 않았다는 사실을 깨달았다. 체감상 알고리즘 주차가 시작된지 한달은 족히 된거같은데 아직 한주가 더 남았다니... 이제 슬슬 체력이 딸리기 시작했다. 최근 며칠간 TIL을 쓸 기력이 없어서 대충 쓴 느낌이 컸는데, 오늘도 아마 비슷할 것 같다. 이번 주 일요일에 푹 쉬어서 체력을 보충해야겠다. 넋두리는 이정도로 하고, 오늘의 TIL은 강의 진도에 맞게 퀵 정렬과 병합 정렬의 개념을 정리하고자 한다. 정렬 퀵 정렬 퀵정렬(Quick sort)은 이름에서 알 수 있다시피 O(n log n)이라는 빠른 속도로 정렬할 수 있는 알고리즘이다. 퀵 정렬은 분할 정복(Divide and Conquert)를 통해 정렬을 하게 되는데, 기준..
들어가며 알고리즘 2주차 마무리 테스트 문제 중 하나인 '방문 기록' 심화트랙 알고리즘 주차에 들어온 이래로 직접 풀어낸 몇 안되는 문제였다. 물론 DFS/BFS 문제는 건들지도 못했지만... 뿌듯하니까 자랑하면서 들어가기로 문제 https://programmers.co.kr/learn/courses/30/lessons/49994 코딩테스트 연습 - 방문 길이 programmers.co.kr 입출력 예시 dirs answer "ULURRDLLU" 7 "LULLLLLLU" 7 생각과정 상하좌우로 움직이는 좌표를 딕셔너리와 튜플을 이용해서 구성하고, 지난 섬의 개수 강의에서 배웠던 것처럼 nx, ny 변수를 만들어 이용해보았다. 처음에는 지나간 부분을 len(visited)로 리턴값을 구하려고 했지만 테스트..
들어가며 알고리즘 2주차도 끝이 났다. 방향성도 어느정도 잡은 것 같고, 자신감도 많이 회복되었다. 주차의 마무리로 보는 테스트를 공부 시작한 지 2주만에 스스로 풀어냈다는 거에 굉장한 뿌듯함이 느껴져서 괜히 다른 문제를 스스로 풀어보려고 했다가 시간을 많이 보냈다...ㅎ 결국 못풀었긴 하지만. 오늘의 늦은 TIL은 간단하게 정렬 알고리즘들의 개념을 쓰고, 시험으로 푼 문제를 정리해보고자 한다! 정렬 파이썬에서 정렬은 sort() 함수나 sorted() 함수로 배열이나 리스트 등등의 자료형을 아주 간단하게 오름차순 혹은 내림차순으로 나열할 수 있다. 그러므로 아래에서 정리할 정렬 알고리즘을 굳이 알아둬야하나? 라고 생각할 수 있지만 우리가 사용하는 함수가 어떤 방식으로 동작하고, 어떻게 코드로 구현되어있..
들어가며 본 포스팅은 책에서 다룬 리트코드 문제들을 다루고 있습니다. 문제들은 모두 리트코드에서 출제된 문제들이며, 문제 풀이의 많은 부분을 책의 힌트와 해설을 참고하였습니다. 포스팅되는 모든 문제들의 목록과 풀이는 파이썬 알고리즘 인터뷰에서 제공하는 깃허브에서 확인하실 수 있습니다. 문제 Given the array of integers nums, you will choose two different indices i and j of that array. Return the maximum value of (nums[i]-1)*(nums[j]-1). 배열에서 (nums[i]-1)*(nums[j]-1)가 가장 큰 값을 출력하라 입출력 예시 Example 1: Input: nums = [3,4,5,2] Ou..
들어가며 나에게 맞는 알고리즘 공부 방법을 찾고나니 한결 마음이 가벼워졌다. 또, 오늘은 문제가 쉬웠는지 직접 문제 풀이에 성공해서 꽤나 뿌듯했다. 이 기쁜 마음을 안고, 오늘의 TIL은 힙의 개념과 문제풀이, 새로 알게 된 개념을 정리해보고자 한다. 힙 힙(heap)은 최댓값과 최솟값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree)이다. 어떤 정수형 배열이 있다고 가정해보자. [9, 8, 7, 6, 5, 4, 3, 2, 1] 이 배열에서 가장 작은 값을 꺼내오려면 요소 하나씩을 검색해서 찾아내야 한다. 그렇게 되면 시간복잡도는 O(n)이 된다. 해당 배열을 힙으로 구현한다면 O(log n)의 시간복잡도를 갖게 된다. 위에서 말했듯이 힙은 완전 이진 트리로 이루어져있기 ..
들어가며 본 포스팅은 책에서 다룬 리트코드 문제들을 다루고 있습니다. 문제들은 모두 리트코드에서 출제된 문제들이며, 문제 풀이의 많은 부분을 책의 힌트와 해설을 참고하였습니다. 포스팅되는 모든 문제들의 목록과 풀이는 파이썬 알고리즘 인터뷰에서 제공하는 깃허브에서 확인하실 수 있습니다. 문제 Given an integer array nums where the elements are sorted in ascending order, convert it to a height-balanced binary search tree. A height-balanced binary tree is a binary tree in which the depth of the two subtrees of every node never..
들어가며 본 포스팅은 책에서 다룬 리트코드 문제들을 다루고 있습니다. 문제들은 모두 리트코드에서 출제된 문제들이며, 문제 풀이의 많은 부분을 책의 힌트와 해설을 참고하였습니다. 포스팅되는 모든 문제들의 목록과 풀이는 파이썬 알고리즘 인터뷰에서 제공하는 깃허브에서 확인하실 수 있습니다. 문제 Given the root of a binary tree, invert the tree, and return its root. 주어진 이진트리를 반전시켜 루트를 리턴하라. 입출력 예시 Example 1: Input: root = [4,2,7,1,3,6,9] Output: [4,7,2,9,6,3,1] Example 2: Input: root = [2,1,3] Output: [2,3,1] Example 3: Input: ..
들어가며 갑자기 잘 쓰던 들어가며에 뭘 써야할 지 헷갈리기 시작했다. 원래 아무말이나 적었던거 같은데... 오늘도 열심히 잠을 잤으니 그 업보를 지금의 나에게 지우기로 하고 오늘의 TIL은 이진 탐색트리의 개념과 문제 풀이를 정리해보고자 한다! 이진 탐색 트리 이진 탐색 트리(BST, Binary Search Tree)란 이진 탐색(Binary search)과 연결리스트(Linked list)의 아이디어를 결합한 자료구조의 일종이다. 커리큘럼상 뒤에 배우게 될 이진탐색의 경우 소요되는 시간 복잡도는 O(log n)으로 빠르지만 삽입, 삭제가 불가능하다. 반면 연결리스트의 경우 삽입, 삭제에 필요한 시간 복잡도는 O(1)로 효율적이지만 탐색하는 데에는 O(n)가 소요된다. 이진 탐색 트리는 이진 탐색의 효..
들어가며 본 포스팅은 책에서 다룬 리트코드 문제들을 다루고 있습니다. 문제들은 모두 리트코드에서 출제된 문제들이며, 문제 풀이의 많은 부분을 책의 힌트와 해설을 참고하였습니다. 포스팅되는 모든 문제들의 목록과 풀이는 파이썬 알고리즘 인터뷰에서 제공하는 깃허브에서 확인하실 수 있습니다. 문제 Given the root of a binary tree, return its maximum depth. A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 이진 트리의 최대 깊이를 구하라. 입출력 예시 Example 1: Input: root ..
반응형