leetcode 19

[leetcode - Java] 209. Minimum Size Subarray Sum

1. 문제 - 배열의 연속된 요소를 더해 target이 되는 최소 길이를 구하여라. 2. 의사 코드 "배열의 요소를 적게 사용하여 요소들의 합이 target과 동일하게 만들 것." 가장 먼저 생각해본 부분으로 이에 맞는 코드를 구현해보려 했다. 1. 배열 정렬(큰 요소부터 더해 target과 가까워지기 위해) 및 필요한 지역변수 선언 Arrays.sort(nums); int left = 0; int right = nums.length-1; int sum = 0; int result = nums.length-1; 2. 가장 적게 배열 요소를 조합하여 target과 일치해야 하기에 정렬된 배열의 뒷 요소부터 인덱스 활용 int right = nums.length-1; 3. 반복문 실행 sum += nums[..

자바 알고리즘 2023.08.27

[leetcode - Java] 167. Two Sum II - Input Array Is Sorted

1. 문제 - 오름차순으로 정렬된 배열에서 두 수를 합하여 target을 만들어라. 2. 의사 코드 1. 투 포인터 및 결과 담을 배열 설정 int left = 0; int right = numbers.length-1; int[] result = new int[2]; 2. while (left < right) { 2-1 배열 왼쪽과 오른쪽 요소를 더해 target과 일치 검사 2-2 target보다 크다면 right 감소, 작다면 left 증가 2-3 target과 일치했을 때 result 배열에 해당 요소의 순서 저장 } 3. 시도 class Solution { public int[] twoSum(int[] numbers, int target) { int left = 0; int right = numb..

자바 알고리즘 2023.08.26

[leetcode - Java] 125. Valid Palindrome

1. 문제 입력받은 문자열을 소문자로 변환, 특수문자를 제거하고 뒤집었을 때 내용이 똑같게 만들어라. 문자열을 뒤집었을 때 스펠링 순서가 다르면 실패 2. 의사 코드 1. 문자열 소문자 변환 & 특수문자, 공백 제거 str = str.replaceAll("[제거할 특수문자들]").toLowerCase(); 2-1 문자열 뒤집어 true/false 판단 2-2 투 포인터를 사용해 문자열 양 끝(left, right)에서부터 비교하며 양 끝의 문자가 같다면 left++ right--, 아니면 false3. 시도 3-1. 문자열s 뒤집기 class Solution { public boolean isPalindrome(String s) { s = s.replaceAll("[^a-zA-Z0-9]", "").toL..

자바 알고리즘 2023.08.26

[leetcode - Java] 121. Best Time to Buy and Sell Stock

1. 문제 배열에서 뒷 요소와 앞 요소를 뺐을 때 가장 차이가 큰 값을 구하여라 2. 시도 배열에서 min과 max를 각각 구해 max-min을 하면 될 것 같았다. 주의할 부분으로는 max가 min보다 앞에 있을 수 있기에 인덱스 위치 파악을 해야할 듯하다. class Solution { public int maxProfit(int[] prices) { int min = prices[0]; int max = 0; int index = 0; for (int i=0; i prices[i]) { min = prices[i]; index = i; } } System.out.println("min = " + min); System.out.println(..

자바 알고리즘 2023.08.25

[leetcode - Java] 189. Rotate Array

1. 문제 nums 배열에서 입력받은 k 만큼 요소들 오른쪽으로 이동시키기 2. 시도 첫 번째 리스트를 새로 생성하고 추가/삭제하는 로직이 중간에 있어 속도 부분에서 효율이 좋지 않을 수 있다. 별 다른 방법이 생각나지 않아 우선 코드가 잘 작동하는지 테스트를 해보았음 class Solution { public void rotate(int[] nums, int k) { int end = nums.length-1; List list = Arrays.stream(nums).boxed().collect(Collectors.toList()); List kLists = new ArrayList(); System.out.println("list = " + list); for (int i=0; i

자바 알고리즘 2023.08.24

[leetcode - Java] 80. Remove Duplicates from Sorted Array II

1. 문제 배열 nums에서 중복되는 각 요소는 최대 2개이며, 2개 초과되는 요소를 삭제한 최종 배열 nums의 길이를 구하여라 2. 시도 nums 배열의 중복된 값을 검사하고 2개 까지만 새 객체에 넣어줬다. class Solution { public int removeDuplicates(int[] nums) { ArrayList arr = new ArrayList(); int index = 0; for (int n : nums) { if (arr.contains(n) && index%2 == 0) { continue; } arr.add(n); index++; System.out.println("index = " + index); System.out.println("arr = " + arr); } f..

자바 알고리즘 2023.08.24

[leetcode - Java] 26. Remove Duplicates from Sorted Array

1. 문제 중복된 값이 존재하는 배열 nums를 중복된 값이 없는 배열로 만들기 2. 시도 입력받은 정수가 배열 안에 있는지 확인하는 leetcode 27번 문제와 비슷하게 접근했다. 하나의 반복문에서 배열 내부의 두 인덱스를 비교하려다보니 ArrayIndexOutOfBoundsException이 자주 발생했고, 중복 확인을 거친 요소들이 새롭게 담길 객체가 필요했다. 3. 개선 class Solution { public int removeDuplicates(int[] nums) { ArrayList arr = new ArrayList(); int index = 0; for (int n : nums) { if (!arr.contains(n)) { arr.add(n); index++; } } for (in..

자바 알고리즘 2023.08.24

[leetcode - Java] 27. Remove Element

1. 알고리즘 문제 정수 val가 배열 nums 안에 포함된다면 val를 제외한 배열 nums의 길이 반환 2. 시도 2번 예제에서 input 값과 정수 val를 제외한 output 값의 순서가 달라 따로 정렬 조건이 있는줄 알았다. 정렬 조건이 있더라도 일단 val를 제외한 이후 정렬 조건을 찾아보려 하였음 class Solution { public int removeElement(int[] nums, int val) { int index = 0; for (int n : nums) { if (n != val) { nums[index] = n; index++; } } System.out.println(Arrays.toString(nums)); return index; } }nums 배열의 크기가 정해지지..

자바 알고리즘 2023.08.24

[leetcode - Java] 88. Merge Sorted Array

1. 알고리즘 문제 배열 nums1과 nums2가 주어지고 각 배열의 유효한 원소 개수는 m, n개 이다. 두 배열의 유효한 원소를 합쳐 nums1 배열의 총 길이가 m+n이 되도록.(오름차순 정렬) 2. 시도 반복문을 통해 nums1의 원소가 0이라면 nums2의 원소로 교체하면 될 것 같았다. class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int j = 0; for (int i=0; i j) { nums1[m] = nums2[j]; j++; m++; } } System.out.println("result = " + Arrays.toString(nums1)); Arrays.sort(nums1); } }

자바 알고리즘 2023.08.23