2023년 03월 05일 일요일 - 오랜만이구만


오늘 올려볼 문제는 1345번 Jump Game IV 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

하드치고는 쉬웠다!


입력


사진에서도 볼 수 있듯이 int 배열 1개가 입력으로 들어온다.



풀이 및 코드


0번째 index에서 마지막 index로 가는 가장 짧은 점프 횟수를 구하는 문제이다.

아래 3가지 방법으로 점프가 가능하다.

  1. 0보다 크거나 같은 index - 1
  2. 배열의 크기보다 작은 index + 1
  3. arr[i] == arr[j] 인 j

오늘은 처음부터 정답을 생각해냈다.

bfs를 하는데 이미 방문했던 곳은 다시 갈 필요가 없으므로 visit 배열도 만들어서 활용했다.

또한 이미 방문한 곳에 원소값에 해당하는 index들은 이미 queue에 들어갔거나 들어있으므로 다시 넣는 과정을 거치지 않는다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int minJumps(int[] arr) {
        var visit = new boolean[arr.length];
        var map = new HashMap<Integer, ArrayList<Integer>>();
        
        for(int i = 0; i < arr.length; i++) {
            var num = arr[i];
            if(!map.containsKey(num)) map.put(num, new ArrayList<>());
            map.get(num).add(i);
        }
        
        var q = new LinkedList<Integer>();
        q.add(0);
        
        for(int jump = 0; jump < arr.length; jump++) {
            int size = q.size();
            for(int i = 0; i < size; i++) {
                var now = q.poll();
                
                if(now == arr.length - 1) return jump;
                
                if(now - 1 > 0 && !visit[now - 1]) q.add(now - 1);
                if(!visit[now + 1]) q.add(now + 1);
                
                if(visit[now]) continue;
                
                visit[now] = true;
                
                for(var index: map.get(arr[now])) {
                    if(visit[index]) continue;
                    visit[index] = true;
                    q.add(index);
                }
            }
        }
        
        return arr.length - 1;
    }
}




제출 화면

leetcode 문제 맞았습니다


생각보다는 오래걸렸는데 조금 처리를 잘못해서 오래걸린 것이라서 실수를 조금 덜하도록 노력해야 할 것 같다.

그래도 하드 문제인 것 치고는 잘 풀어서 맘에 든다.


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

2023년 03월 01일 수요일 - 대황T1!


오늘 올려볼 문제는 912번 Sort an Array 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

오랜만에 sort 구현해봤네 ㅎㅎ


입력


사진에서도 볼 수 있듯이 int 배열 1개가 입력으로 들어온다.



풀이 및 코드


시간 복잡도 nlogn 인 정렬을 직접 구현하는 문제이다.


오늘은 처음부터 정답을 생각해냈다.

머지소트로 진행했다~


이제 코드를 봐보자!


풀이코드

class Solution {
    int[] arr;
    public int[] sortArray(int[] nums) {
        arr = nums;
        sort(0, nums.length - 1);
        return arr;
    }
    
    public void sort(int left, int right) {
        int mid = left + (right - left) / 2;
        if(right - left > 1) {
            sort(left, mid);
            sort(mid + 1, right);
            merge(left, mid, mid + 1, right);
        } else {
            if(arr[left] > arr[right]) {
                int temp = arr[left];
                arr[left] = arr[right];
                arr[right] = temp;
            }
        }
    }
    
    public void merge(int ls, int le, int rs, int re) {
        var tArr = new int[re - ls + 1];
        int li = ls, ri = rs;
        
        for(int i = 0; i < tArr.length; i++) {
            if(li <= le && ri <= re) 
                tArr[i] = arr[arr[li] < arr[ri] ? li++ : ri++];
            else if(li > ls && ri <= re) 
                tArr[i] = arr[ri++];
            else 
                tArr[i] = arr[li++];
        }
        
        for(int i = 0; i < tArr.length; i++) arr[ls + i] = tArr[i];
    }
}




제출 화면

leetcode 문제 맞았습니다


뭔가 오랜만에 이런 구현을 직접해서 그런지 예쁘게 구현하지는 못한것 같다.


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

2023년 02월 25일 토요일 - 최강 T1!!


오늘 올려볼 문제는 121번 Best Time to Buy and Sell Stock 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

이것도 풀었었던 문제네


입력


사진에서도 볼 수 있듯이 int 배열 1개가 입력으로 들어온다.



풀이 및 코드


주어진 주식 차트 가장 큰 수익을 만들었을 때 그 수익을 구하는 문제이다.


오늘은 처음부터 정답을 생각해냈다.

뭐 그냥 순회하면서 찾으면 되는....


이제 코드를 봐보자!


풀이코드

class Solution {
    public int maxProfit(int[] prices) {
        int min = prices[0], result = 0;
        for(var p : prices) {
            min = Math.min(min, p);
            result = Math.max(result, p - min);
        }
        
        return result < 0 ? 0 : result;
    }
}




제출 화면

leetcode 문제 맞았습니다


역시 티원이 최강이다!!!


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

번아웃이 왔다.

그것도 이번에는 아주 크게.

 

뭐 사실 당연한 수순이다.

이직 준비한다고 집에서 공부 회사에서 일 이 생활을 몇달동안 계속했으니.

 

지금은 집에서는 아무것도 안한다.

그냥 시간을 죽이고 있다.

 

시간을 죽이는데도

별 다른 생각이 안든다.

 

이직 때 열심히 불사올랐던 기억을 되살리며

지금은 쉬어도 되지라는 막역한 자기위로를 한다.

 

사실 나는 개발만 즐기는 거지

기획을 즐기는 것 같지는 않다.

 

게다가 그 기획에

디자인까지 붙어있는 경우에는 싫어하는 것 같다.

 

그게 문제인 걸까?

이젠 개인 프로젝트를 시작하기도 싫다.

 

이미 명확한 도면이 있는 것에 길을 만드는 것이 아니라면

굳이 내가 도면을 만들고 싶지않다.

 

이 느낌도 언젠가는 사라질 걸 안다.

내가 해왔던 모든 것들을 부정하는 행동이니.

 

그래도 지금은 무엇도 하기 싫다.

그냥 쉬고 싶다.

 

그래서 쉬고 있다.

본능을 거스르지 않는다.

 

목표를 세우지 않는다.

목표를 향해서 달려갈걸 알기에.

 

사실 지금 생활이 재미는 딱히 없다.

그냥 살고는 있다는 느낌 뿐

 

물론 이 새하얗게 불타오른 재가 바람에 흩날리고 나면

또 다른 장작으로 불타오를 것이다.

 

그 때는 나무 같이 한 번에 타오르는 장작이 아닌

숯처럼 오래 타는 열정을 가져보고 싶다.

2023년 02월 23일 목요일 - 대황T1!


오늘 올려볼 문제는 502번 IPO 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

크으 티원 경기력 미쳤다리


입력


사진에서도 볼 수 있듯이 int 값 2개와 int 배열 2개가 입력으로 들어온다.



풀이 및 코드


문제 설명하기에는 조금 어렵다... 사진 참고해주세요...


오늘은 처음부터 정답을 생각해냈다.

TreeMap으로 key-value 형식으로 저장해준다.

이 후 floorKey를 사용해서 최대 이익을 뽑아내고 그리디를 사용하는 방식으로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) {
        var map = new TreeMap<Integer, ArrayList<Integer>>();
        
        for(int i = 0; i < profits.length; i++) {
            if(!map.containsKey(capital[i])) map.put(capital[i], new ArrayList<>());
            map.get(capital[i]).add(profits[i]);
        }
        
        var pq = new PriorityQueue<Integer>(Collections.reverseOrder());
        int result = w;
        
        for(int i = 0; i < k; i++) {
            while(map.floorKey(result) != null) {
                pq.addAll(map.get(map.floorKey(result)));
                map.remove(map.floorKey(result));
            }
            
            if(!pq.isEmpty()) result += pq.poll();
        }
        
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


pq 2개로 문제를 풀 수 있었다... ㄷㄷ

아 그리고 어제 감성 글은 안썼다.

왜냐고? 까먹었거든 ㅋ

오늘 쓸 듯


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

2023년 02월 22일 수요일 - 민규 자취방에 놀러가따!


오늘 올려볼 문제는 1011번 Capacity To Ship Packages Within D Days 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

이진탐색 파뤼


입력


사진에서도 볼 수 있듯이 int 배열 1개와 int 값 1개가 입력으로 들어온다.



풀이 및 코드


int 배열 순서를 지키면서 배를 통해 물건을 나를 때 days 만큼 나를 수 있다. 모든 물건을 나르는데 필요한 배의 가장 작은 수용량을 구하는 문제이다.


오늘은 처음부터 정답을 생각해냈다.

배 용량으로 바이너리 서치를 하면 된다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int shipWithinDays(int[] weights, int days) {
        int sum = 0, max = 0;
        for(var w : weights) {
            sum += w;
            max = Math.max(max, w);
        }
        
        int left = max, right = sum;
        
        while(left <= right) {
            int count = 0, s = 0, mid = left + (right - left) / 2;
            
            for(var w : weights) {
                if(s + w > mid) {
                    s = 0;
                    count++;
                }
                
                s += w;
            }
            
            if(count >= days) left = mid + 1;
            else right = mid - 1;
        }
        
        return left;
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘은 블로그로 갬성 글을 조금 써볼 생각이다.

왜냐고? 그냥


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

2023년 02월 21일 화요일 - 스키 여행 너무 재밌었다!


오늘 올려볼 문제는 540번 Single Element in a Sorted Array 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

최근 이지 문제는 귀찮아서 안올렸더니 굉장히 오랜만에 쓰는 것 같네요


입력


사진에서도 볼 수 있듯이 int 배열 1개가 입력으로 들어온다.



풀이 및 코드


정렬된 배열이 들어오는 데 이 배열에 정확히 1개의 숫자만 1개 존재하고 나머지 숫자들은 2개 존재한다.

이 때 시간 복잡도 O(log n) 공간 복잡도 O(1)로 1개 있는 숫자를 찾는 문제이다.


오늘은 처음부터 정답을 생각해냈다.

그냥 바이너리 서치 문제이다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int singleNonDuplicate(int[] nums) {
        int l = 0, r = nums.length - 1;
        while(l <= r) {
            int mid = l + (r - l) / 2;
            
            if(mid == 0 || mid == nums.length - 1) {
                return nums[mid];
            } else if(nums[mid] == nums[mid - 1]) {
                if(mid % 2 == 1) l = mid + 1;
                else r = mid - 1;
            } else if(nums[mid] == nums[mid + 1]) {
                if(mid % 2 == 0) l = mid + 1;
                else r = mid - 1;
            } else {
                return nums[mid];
            }
        }
        
        return 0;
    }
}




제출 화면

leetcode 문제 맞았습니다


이번에 외국인 친구들과 함께하는 스키여행을 가서 재밌게 즐겼다.

많은 친구들을 사귀었고 스키도 재밌었고 영어도 엄청 많이 해보고 카지노는 못가봤다 ㅠㅠ

담에도 하면 꼭 가야지!


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

2023년 02월 13일 월요일 - 아니 지난주 문제 너무 어렵자너..


오늘 올려볼 문제는 1523번 Count Odd Numbers in an Interval Range 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

근데 오늘은 그냥 알고리즘이라고 할 수도 없이 쉽자너..


입력


사진에서도 볼 수 있듯이 int값 2개가 입력으로 들어온다.



풀이 및 코드


주어진 int 2개 사이에 홀수가 몇개있는지 구하는 문제이다.


오늘은 처음부터 정답을 생각해냈다.

설명도 사치다..


이제 코드를 봐보자!


풀이코드

class Solution {
    public int countOdds(int low, int high) {
        return ((low % 2 == 1 || high % 2 == 1) ? 1 : 0) + (high - low ) / 2;
    }
}




제출 화면

leetcode 문제 맞았습니다


아니 요즘 leetcode 난이도 조절 실화임?

중간이 없네..


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts