본문 바로가기

알고리즘

Symmetric Tree (Recursive) LeetCode의 Binary Tree 튜토리얼의 두 번째 섹션의 두 번째 문제인 Symmetric Tree다. Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore. leetcode.com 주어진 트리가 대칭 구조인지 판별하는 문제로 대칭 구조인 트리라는 것은 다음과 같은 트리를 의미한다. 마치 거울을 보는 것처럼 좌우반전을 해도 그 모양과 노드의 값이 동일한 트리를 대칭 트리라고.. 더보기
Maximum Depth of Binary Tree (Recursive) LeetCode의 Binary Tree 튜토리얼의 두 번째 섹션의 첫 번째 문제인 Maximum Depth of Binary Tree다. Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore. leetcode.com 이진트리의 높이(또는 깊이)를 구하는 문제로 루트 노드부터 시작해서 가장 깊은 곳에 있는 자식 노드까지 몇 개의 노드를 거쳐가야 하는지 구하는 문제다. LeetCode의.. 더보기
Group Anagrams LeetCode의 Group Anagrams 문제다. Group Anagrams - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 주어진 문자열들에 대하여 애너그램에 해당하는 단어끼리 묶어서 리스트로 반환하는 것이 목적인데 처음에 생각한 것은 어차피 애너그램은 글자가 뒤죽박죽 섞여있더라도 결국 문자의 개수는 동일하기 때문에 이전 포스트에서 활용한 Counter 클래스를 이용하여 각 문자 별 빈도를 계산, 동일 여부로 계산하는 방법이었다. import collec.. 더보기
Most Common Word LeetCode의 Most Common Word 문제다. Most Common Word - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 이전 포스트에 이어 문자열 처리에 관련된 문제인데 문장을 단어 단위로 구분해야 하기 때문에 여간 까다로운 문제가 아니었다. 그래서인지 Easy 난이도임에도 불구하고 비추가 더 많은 것 같은데... 일단 결과적으로는 풀이를 참고했기 때문에 완전히 스스로의 힘으로 푼 건 아니지만 생각을 조금 전환할 수 있는 계기가 됐다. 문제는 .. 더보기
String to Integer (atoi) LeetCode의 String to Integer (atoi) 문제다. String to Integer (atoi) - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 단순히 주어진 문자열을 정수로 변환하는 것이 목적인데 파이썬에서는 그냥 int() 메서드로 문자열을 정수로 변환할 수 있다. 하지만 메서드의 매개변수로 전달되는 문자열은 올바른 문자열이어야 하기 때문에 문제에서 주어진 문자열을 필터링하는 과정이 필요하다. 문제에서 요구되는 조건은 다음과 같다. 문자.. 더보기
Reorder Data in Log Files (Sort) LeetCode의 Reorder Data in Log Files 문제다. Reorder Data in Log Files - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 주어진 문자열을 특정 조건에 따라 정렬시키는 문제인데 지엽적인 조건이 많아서 그런지 너무 쉬워서 그런 건지 모르겠지만 평가가 별로 좋지 않다(비추가 추천의 3배...). 그래도 파이썬 활용에 익숙해지고 정렬 메서드를 연습하는 김에 풀어보았다. 문제의 조건은 다음과 같다. 문제에서는 로그(문자열).. 더보기
Binary Tree Level Order Traversal (Queue) LeetCode의 Binary Tree 튜토리얼의 첫 번째 섹션의 네 번째 문제인 Binary Tree Level Order Traversal다. 이전 Binary Tree Inorder Traversal (Stack) 포스트에서 간단하게 다루었던 Level-order 방식으로 탐색하는 문제다. 이는 같은 높이에 있는 모든 노드를 한 번에 탐색하는 것이기 때문에 약간 BFS와 유사하다고 볼 수 있다. 위처럼 여러 계층의 노드가 있을 때 첫 번째 계층에 있는 노드는 노드 1밖에 없기 때문에 이를 탐색하고 두 번째 계층에 있는 노드는 노드 2, 노드 3이 있기 때문에 이를 둘 다 탐색한다. 그리고 세 번째 계층에 있는 노드는 노드 4, 노드 5가 있기 때문에 역시 이를 둘 다 탐색한다. 이렇게 한 계층, 높.. 더보기
Binary Tree Postorder Traversal (Stack) LeetCode의 Binary Tree 튜토리얼 첫 번째 섹션의 네 번째 문제인 Binary Tree Postorder Traversal다. In-order, Pre-order와 다르게 오늘따라 집중이 더 잘 안돼서 그런가 몇 시간을 허비한 것 같다. 안 되겠어서 그냥 풀이를 찾아봤는데 재귀적인 방식으로 하면 간단하지만 이전처럼 스택을 활용해서 푸는 방법은 없을지 고민하고 찾아보다가 시간을 너무 낭비한 것 같다. 알고리즘은 이곳에서 참고했다. 하나의 스택과 두 개의 노드 포인터를 사용하는데 노드 포인터는 각각 현재 탐색하는 노드, 이전에 탐색했던 노드를 가리키고 있으며 좀 특이하게 두 노드 포인터의 상하 관계(부모, 자식 노드)가 자주 바뀌기 때문에 이해하기가 좀 어려웠던 것 같다. Iterative P.. 더보기