본문 바로가기

반응형

old/Algorithm Solving

(58)
LeetCode 1431. Kids With the Greatest Number of Candies 자바 문제 풀이 문제 Kids With the Greatest Number of Candies - LeetCode 문제 해결 방법 알고리즘 일단 주어진 어레이에서 max값을 찾는다 각 어레이를 순회하며, 추가 사탕을 더한값이 max값보다 크면 true를 작으면 false를 추가한다. stream을 사용하는것은 추천하지 않습니다. 복잡한 요소가 있는것이 아니기때문에 단순한 advanced for문 정도면 충분합니다. if(candy + extraCandies < max)에서 candy + extraCandies를 따로 가로안에 넣어줄 필요도 없습니다. 자바 우선순위에 따라 필요하지 않습니다. if문은 물음표 연산자로 대체 가능합니다. if(candy+extraCandies= max)); } return result; }
LeetCode 217. Contains Duplicate 자바 문제 풀이 문제 Problem_Link 시간복잡도: O(n), 공간복잡도: O(n) class Solution { public boolean containsDuplicate(int[] nums) { // 배열의 요소를 저장하기 위해 HashMap을 생성합니다. HashMap map = new HashMap(); // 배열의 모든 요소를 순회합니다. for (int temp : nums) { // HashMap에 현재 요소가 이미 존재하는지 확인합니다. if (map.containsKey(temp)) { // 만약 존재한다면, 배열에 중복된 요소가 있다는 뜻으로 true를 반환합니다. return true; } else { // 존재하지 않는다면, HashMap에 현재 요소를 추가합니다. // 1은 중복된 요소가 있..
LeetCode 42. Trapping Rain Water 자바 문제 풀이 문제 Trapping Rain Water - LeetCode 문제 해결 방법 물을 받기위해서 최소한 1,0,1의 높이가 필요하므로, 최소한 3개이상의 엘레맨트가 필요합니다. 알고리즘 체크하길 원하는 포지션을 기준으로 왼쪽과 오른쪽에서 가장 높은 블럭 수를 구합니다. 두 높은 수에서 작은수 만큼 물을 채울수 있습니다. 이제 포지션의 블럭수를 확인해서 채울수 있는 물의 높이를 뺍니다. 모든 포지션을 반복합니다. 위 알고리즘을 사용하기 위해서 미리 루프문을 돌려서 오른쪽의 가장 높은 블럭수와 왼쪽의 가장 높은 블럭수를 미리 구해야 합니다. 아래와 같이 필요한 수를 확인할수 있습니다. Github Link https://github.com/eunhanlee/LeetCode_42_TrappingRainWater_..
LeetCode 771. Jewels and Stones 자바 문제 풀이 문제 Jewels and Stones - LeetCode 문제 해결 방법 이 문제는 입력된 스트링에 입력된 또다른 스트링의 각 문자가 존재하는지 확인 하는 문제입니다. 각각 한번씩은 확인할수 밖에 없으므로, O(n^2)입니다. 기초적인 문자열을 다루는 법을 아느냐고 묻는 문제입니다. 아래와 같이 풀기 위해서, toCharArray() 메서드에 대해서 알아야 하며, char타입 비교를 위해서 자바의 데이터 타입에 대하여 알아야 합니다. 자바의 Primitive 데이터 타입과 Reference 데이터 타입 Github Link https://github.com/eunhanlee/LeetCode_771_JewelsandStones_Solution.git 시간복잡도: O(n^2), 공간복잡도: O(1) clas..
LeetCode 35. Search Insert Position 자바 문제 풀이 문제 Search Insert Position - LeetCode 문제 해결 방법 주어진 문제의 잇풋은 정렬된 어레이입니다. O(log n)안에 풀어야 된다는 조건이 있습니다. 이미 정렬된 리스트에서 log n으로 찾는 방법은 이진검색(binary search)뿐입니다. 이 문제는 이진검색에 대해서 잘 알고, 이를 구현할수 있느냐고 묻는 문제입니다. 또한 이진검색을 구현시, 재귀함수를 사용할지 반복문을 사용할지 선택해야 합니다. 이 문제는 이전단계의 결과가 필요하지 않고, 하위문제로 분리할 필요도 없으므로, 반복문으로 구현하는것이 효과적입니다. 값을 찾지 못했을떄, 가장 가까운 값을 리턴해야 하므로, low값을 리턴합니다. mid값은 변경전이고, mid값에서 2를 나누고 남은 값은 버림을 하므로, hig..
LeetCode 1603. Design Parking System 자바 문제 풀이 문제 Design Parking System - LeetCode 문제 해결 방법 자바 오브젝트 생성을 할수 있느냐고 묻는 문제 입니다. 1번 답은 기본적인 오브젝트 생성이며, 협업하고, 나중에 업데이트 하기 좋은 코드 입니다. 2번 답은 이 문제에 있어서 매우 효율적이지만, 나중에 업데이트하기 어려운 코드 입니다. Github Link https://github.com/eunhanlee/LeetCode_1603_DesignParkingSystem_Solution.git 1번 답 class ParkingSystem { private int bigSlots; // 대형 차량용 사용 가능한 슬롯 수 private int mediumSlots; // 중형 차량용 사용 가능한 슬롯 수 private int sma..
LeetCode 116. Populating Next Right Pointers in Each Node 자바 문제 풀이 문제 Populating Next Right Pointers in Each Node - LeetCode 문제 해결 방법 기본적인 트리가 주어지고, 이를 연결하는 문제입니다. level order을 돌며, 각 노드를 연결하는 알고리즘이 필요합니다. 문제에서 perfect binary tree라고 하였습니다., 즉 비어있는 노드는 존재하지 않습니다. level 1일때, level2를 모두 연결합니다. 트리의 가장 왼쪽 노드를 levelStart로 설정합니다. 다음 노드와 연결합니다.(상위 레벨이 이미 연결되있으므로, 이동이 쉽습니다.) 다음 노드의 왼쪽노드가 존재하지 않는다면, 현재 레벨은 모두 연결이 끝난것입니다. BFS=level order, 재귀함수를 사용가능합니다. 재귀함수는 복잡한 작업을 단순화할 ..
LeetCode 378. Kth Smallest Element in a Sorted Matrix 자바 문제 풀이 문제 Kth Smallest Element in a Sorted Matrix - LeetCode 문제 해결 방법 보자마자 처음 들었던 생각은 구글 인터뷰 질문중 하나인 25마리 말 문제였다. 인터뷰 질문: 25마리 말 문제 위 문제의 해결방법은 위 문제와는 다르다 왜냐하면, 25마리 말 문제는 k가 정해져 있고. 이 문제는 정해져 있지 않기 떄문이다. 이 문제는 여러가지 해결법이 존재하지만, 가장 쉬운 방법은 이진검색이라고 생각한다. 다만, k수 만큼 남아있는지 카운트를 해야 하므로, 이는 log n 이 아닌 n log n이 걸린다. 알고리즘 이진탐색으로 가운데의 값을 기준삼아 왼쪽에 남아있는 수가 k만큼인지 확인한다. 우리가 원하는 수는 k번째에 있는 수 이므로, 남아있는 수가 k만큼이면, 그 다음에 ..

반응형