leetcode 4

[leetcode - 49. Group Anagrams] java

문제 설명1. 문자열의 배열이 주어진다.2. 아나그램(문자를 섞어서 같은 것들)을 묶으면 됨3. 순서는 상관 없음풀이 과정(느린풀이)1. 처음에는 간단하게 이중 map으로 구했다.2. 빈도수를 가진 map 을 만들고, 그 map을 다시 key로 가지면서 value 에 String 들을 List로3. 딱봐도 느릴것같았는데 최저속도로 통과했다ㅋㅋ코드class Solution { public int[][] merge(int[][] intervals) { // 정렬에 대한 얘기가 처음에 없음. 근데 시작점만 정렬해주면 될듯? Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); // 최초 배열 만..

알고리즘 공부 2025.03.03

[leetcode - 55. Jump Game] java

문제 설명1. 배열이 주어진다.2. 최대 거기 적힌 숫자만큼 점프할 수 있다.3. 목적지에 도달할 수 있는(목적지에 정확히 가거나 그 이상)지 확인하면 된다.풀이 과정 1. 간단한 DFS 문제이다.2. 지금 위치에서 갈 수 있는 모든 곳을 가면서 체크해준다.3. 그리고 거기서 또 다음 위치로 가서4. 도달한 곳이 목적지 혹은 그보다 더 갔으면 true이다.5. (2) 과정에서 이전 경우에 이미 도달했을 수도 있다. 그러면 애는 더이상 체크할 필요가 없다.코드class Solution { private static boolean check[]; private static boolean ans; public boolean canJump(int[] nums) { check = ne..

알고리즘 공부 2025.01.28

[leetcode - 135. Candy] java

문제 설명1. 배열이 주어진다.2. 모든 학생은 사탕을 최소 1개 이상을 가진다.3. 양 옆 학생 중 나보다 점수가 낮은 녀석들 보다는 사탕을 많이 가져야 한다.3-1. 참고로 나랑 점수가 같으면 어떨지는 상관이 없다.풀이 과정 1. 무조건 사탕을 1개만 받는 사람들을 큐에 넣는다. (양옆이 모두 나보다 크거나 같은 경우)2. 그 사람들부터 시작해서 오른쪽 왼쪽 모두 찾는다.3. 다음에 찾은 친구의 점수가 이전 친구보다 높다면, 사탕을 그보다 1개 이상 더 가지고 있어야 한다.4. 그런데, 그 높은 친구의 반대쪽에도 더 점수가 낮은 학생이 있을 수 있다.5. 우리는 이미 모든 위치에서 찾기로 했다. 결국 최종적으로 어떤 학생은 양옆보다 큰 숫자를 가지고 있으면 된다.6. 이렇게 해서 구한 모든 사탕을 더..

알고리즘 공부 2025.01.28

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

문제 설명1. 배열이 주어진다.2. 중복을 제거한다.3. 근데 한번의 중복까지는 허용한다.풀이 과정1. 그냥 하나씩 더해가면서 구하면 된다.2. 한번의 중복은 허용하기 때문에 한번 허용했다는 flag를 만들고 활용하면 된다.3. 시작할 때에 index 에 대한 flag는 아직 없기 때문에 이에 대한 방어로직을 처음에 작성해주면 된다.코드class Solution { public int removeDuplicates(int[] nums) { // index 확인 int index = 0; boolean canDup = true; // 중복 추가 허용 여부. 처음 인덱스에 대해서는 중복 추가 가능 true // 처음꺼는 이미 들어가니까 1부터 ..

알고리즘 공부 2025.01.26