전체 글 (237) 썸네일형 리스트형 LeetCode 102. Binary Tree Level Order Traversal 자바 문제 풀이 문제 Binary Tree Level Order Traversal - LeetCode 문제 해결 방법 level order라는것은 level 순서대로 출력하라는 뜻이며, BFS와 같습니다. BFS는 DFS와 달리 큐를 사용하며, 문제와 같은 경우 재귀함수보단 반복문을 사용하는 편이 더 알맞습니다. 즉, 이 문제는 BFS를 정확히 이해하고 구현할수 있느냐고 묻는 문제 입니다. https://github.com/eunhanlee/LeetCode_102_BinaryTreeLevelOrderTraversal_Solution.git 시간복잡도: O(n), 공간복잡도: O(m:트리최대 넓이) public class Solution { /** * 주어진 이진 트리에 대해 레벨 순서 순회를 수행하고 각 레벨의 노드 값.. LeetCode 347. Top K Frequent Elements 자바 문제 풀이 문제 Top K Frequent Elements - LeetCode 문제 해결 방법 답이 반드시 존재합니다. k는 n보다 작습니다. 일단 각 숫자의 빈도를 카운트합니다. 중복제외한 숫자가 얼마나 나올지 모르므로, 어레이가 아니라 해쉬맵을 사용합니다. 빈도순으로 정렬합니다. k만큼 출력합니다. https://github.com/eunhanlee/LeetCode_347_TopKFrequentElements_Solution.git 시간복잡도: O(n log n), 공간복잡도: O(n + k) class Solution { /** * 주어진 배열에서 가장 빈도가 높은 k개의 숫자를 찾습니다. * * @param nums 입력 숫자 배열입니다. * @param k 찾을 빈도가 높은 숫자의 개수입니다. * @ret.. 힙 자료구조란 정의 힙(Heap)은 이진 트리(Binary Tree) 기반의 자료 구조로서, 최댓값이나 최솟값을 빠르게 찾기 위해 사용됩니다. 종류 힙은 일반적으로 최소 힙(Min Heap)과 최대 힙(Max Heap)으로 나뉩니다. 최소 힙은 부모 노드가 자식 노드보다 작거나 같은 값을 가지며, 최대 힙은 부모 노드가 자식 노드보다 크거나 같은 값을 가집니다. 사용해야 할 때 다음과 같은 경우에 힙을 사용할 수 있습니다: 우선순위 큐(Priority Queue)를 구현해야 할 때 최댓값 또는 최솟값을 빠르게 찾아야 할 때 정렬된 상태를 유지하며 요소를 삽입하거나 삭제해야 할 때 예제 다음은 자바에서 힙 자료구조를 사용하는 예제 코드입니다: import java.util.PriorityQueue; public clas.. LeetCode 49. Group Anagrams 자바 문제 풀이 문제 Group Anagrams - LeetCode 문제 해결 방법 -아나그램으로 순서를 바꾼 단어들을 모으는 문제입니다. -알파벳 순서를 바꿔도 모두 똑같은 문자열이 사용됬다는것을 확인하려면, 정렬을 해야 합니다. -eat 이든 tea이든 정렬하면 똑같은 문자열이 나옵니다. -해쉬맵을 이용하여 정렬된 문자열을 키로 사용하고, 똑같은 키가 나오는 문자열을 모으면 됩니다. https://github.com/eunhanlee/LeetCode_49_GroupAnagrams_Solution.git 시간복잡도: O(nk), 공간복잡도: O(nk) N은 문자열 배열의 길이 K는 배열 내 문자열의 최대 길이 class Solution { /** * 문자열 배열에서 아나그램을 그룹화합니다. * * @param strs.. LeetCode 191. Number of 1 Bits 자바 문제 풀이 문제 Number of 1 Bits - LeetCode 문제 해결 방법 -이 문제는 프로그래밍 언어에서 바이너리 구조를 알고 있느냐 묻는 문제입니다. -C, C++같은 저급언어라면 이 문제를 반드시 알고 있어야 하지만, 자바에서는 굳이 알아야 할 필요는 없다고 생각합니다. -문제는 unsigned integer이라고 상정하라고 했지만, 자바는 unsigned가 없습니다. -자바의 bitwise operator인 ‘>>>’와 논리게이트인 ‘&’를 알면 쉽습니다. 자바 연산자 & 란 논리게이트인 AND 연산입니다. 1&1이면 1을 반환 1&0 혹은 0&1이면 0을 반환합니다. 자바연산자 >>> 란 비트를 시프트하는 연산자 입니다. 111이라는 비트가 있으면 오른쪽으로 한칸 옮겨서 011이 됩니다. 시간복잡도.. LeetCode 289. Game of Life 자바 문제 풀이 문제 Game of Life - LeetCode 문제 해결 방법 -조건 주위 live cell의 개수가 2보다 작으면 dead 주위 live cell의 개수가 2와 같으면 유지 주위 live cell의 개수가 3과 같으면 live 주위 live cell의 개수가 3보다 많으면 dead -즉 이미 죽었느냐 살았느냐 보다는 주위에 있는 live cell의 개수를 세는게 중요함 -보드의 끝부분에 있을때는 없는 부분에 주의하여, null pointer가 안나도록 해야함. -이미 업데이트된 정보를 다시 검색하지 않으므로, 새로운 2D어레이를 생성해서 사용하는게 좋음. 시간복잡도: O(mn), 공간복잡도: O(mn) https://github.com/eunhanlee/LeetCode_289.GameofLife.gi.. Java 메소드 매개변수 참조 변경 불가: 왜 그럴까요? 질문 Java에서는 메소드 매개변수로 전달된 참조를 변경하여 원본 객체를 수정하는 것이 불가능합니다. 왜 그럴까요? 개요 Java에서는 메소드 매개변수로 전달된 배열의 참조를 변경하여 원본 배열을 수정하는 것이 불가능합니다. 이유 Java는 메소드 호출 시 매개변수를 값에 의한 복사(call by value)로 전달합니다. 배열은 참조 타입이므로, 메소드 내부에서 배열 매개변수에 새로운 배열을 할당하면 해당 매개변수는 새로운 배열을 가리키게 됩니다. 그러나 이 변경은 메소드 외부에 있는 원본 배열에는 영향을 주지 않습니다. 이는 자바가 call by value language라 불리는 이유입니다. 사용 방법 Java에서는 배열을 직접 수정하는 것이 아니라 복사하여 변경한 후, 변경된 배열을 새로운 변수에.. LeetCode 108. Convert Sorted Array to Binary Search Tree 자바 문제 풀이 문제 Convert Sorted Array to Binary Search Tree - LeetCode 문제 해결 방법 -정렬된 어레이를 가지고 바이너리 서치트리에 밸런스 있게 넣는 문제입니다. -이진트리는 밸런스가 맞아야 하므로, 바이너리 서치 트리를 만드는 법을 아느냐고 묻는 문제입니다. 바이너리 서치 트리는 보통 재귀함수를 사용해서 구현합니다. root는 전체 어레이의 중간값을 넣습니다. 왼쪽노드역시 왼쪽부분의 중간값을 넣습니다. 오른쪽 노드 역시 오른쪽 부분의 중간값을 넣습니다. -재귀함수가 아닌 반복문으로 구현할경우, 코드자체가 복잡해지고 이해하기 어렵지만, 오버플로우의 위험성이 사라진다는 장점이 있습니다. 시간복잡도: O(log n), 공간복잡도: O(n) https://github.com/eu.. 이전 1 ··· 10 11 12 13 14 15 16 ··· 30 다음