본문 바로가기

반응형

old/Algorithm Solving

(58)
LeetCode 28. Find the Index of the First Occurrence in a String 자바 문제 풀이 문제 Find the Index of the First Occurrence in a String - LeetCode 문제 해결 방법 스트링의 indexOf를 사용하면 한번에 해결이 가능합니다. 만약 indexOf를 사용하면 안된다면, substring을 이용해서 로직을 짤수 있습니다. substring을 이용하여, haystack의 문자열을 needle의 길이만큼 자른다. 자른 문자열을 비교한다. 자를 문자열의 인덱스를 한칸 옮긴다. 이를 반복한다. 만약 자른 문자열의 길이가 needle의 길이보다 짧다면, needle문자열은 존재하지 않으므로 -1을 리턴한다 즉, 이문제는 문자열을 자르고 검색할수 있는 능력이 있는지 묻는 문제입니다. Github Link https://github.com/eunhanl..
LeetCode 1920. Build Array from Permutation 자바 문제 풀이 문제 Build Array from Permutation - LeetCode 문제 해결 방법 어레이와 for문의 구조를 알고 제대로 사용할수 있는지 묻는 문제. input array의 길이만큼 필요한 수가 입력되므로, edge case를 고민할 필요도 없음. 굳이 최적화를 한다면, System.gc()를 사용하여 강제적으로 가비지 컬렉션을 사용, 메모리를 아끼는것이지만, 자바에서는 이를 요청하지 않는것이 권장됨. Github Link https://github.com/eunhanlee/LeetCode_1920_BuildArrayfromPermutation_Solution 시간복잡도: O(n), 공간복잡도: O(n) public class Solution { /** * 주어진 입력 배열을 기반으로 새로운 ..
LeetCode 62. Unique Paths 자바 문제 풀이 문제 Unique Paths - LeetCode 문제 해결 방법 문제 해결방법에는 조합을 사용하는 방법과 동적프로그래밍을 사용하는 방법등이 있습니다. 조합을 사용하면 수학적으로 계산하므로, 코드는 인간이 이해하기 쉽지만, 팩토리얼 계산떄문에 시간이 오래걸릴수 있고, 동적프로그래밍은 추가적인 배열을 사용해야 해서 공간을 좀더 사용한다는 특징이 있습니다. 조합을 이용하는 방법 오른쪽과 왼쪽으로 이동해야 하는 양은 변함이 없습니다. 조합이란, 일부 문자를 선택하여 만들 수 있는 모든 가능한 경우의 수이며, n과 r을 선택할수 있으면 쉽게 구현할수 있습니다. n: 전체 요소의 수 r: 선택해야 하는 요소의 수 계산식: Total combinations = n! / (r! * (n - r)!) 문제에서 입력받는 ..
LeetCode 2114. Maximum Number of Words Found in Sentences 자바 문제 풀이 문제 Maximum Number of Words Found in Sentences - LeetCode 문제 해결 방법 이 문제는 문장에서 단어의 개수를 세고, 이를 비교해서 가장 많은 단어수를 찾는 문제입니다. 반복문, 단어개수 세는법, 최대값 찾는 법 등을 알고 있고 이를 잘 조합하여 사용할수 있는지 묻는 문제입니다. 알고리즘 반복문을 사용하여 각각 문장을 확인합니다 각 문장의 단어수를 계산합니다 단어 수들을 비교하여 최대값을 찾아냅니다. 여러가지 방법이 있는데 이유는 각각 반복문, 단어개수 세는법, 최대값 찾는 법등이 여러가지가 있기 떄문입니다. 반복문: for문, while문, advanced for문 단어개수 세는법: split을 이용하여 분할하여 단어 개수 세기, char어레이로 빈칸수를 찾은다..
LeetCode 36. Valid Sudoku 자바 문제 풀이 문제 Valid Sudoku - LeetCode 문제 해결 방법 이 문제는 수도쿠의 맵을 생성시 그 조건을 체크하는 코드를 생성하는 문제이다. Solution 2는 가장 최적화된 코드이고, Solution 1는 분할을 많이하여 나중에 수정을 염두에 둔 코드이다. Github Link https://github.com/eunhanlee/LeetCode_36_Valid_Sudoku_Solution.git Solution 1 시간복잡도: O(1), 공간복잡도: O(1) import java.util.*; public class Solution { /** * 주어진 스도쿠 보드가 유효한지 확인합니다. * * @param board 스도쿠 보드를 2차원 char 배열로 표현합니다. * @return 보드가 유효하..
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..
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..

반응형