2022년 06월 12일 일요일 - 외주를 한 것인가??


오늘 올려볼 문제는 1695번 Maximum Erasure Value 이라는 문제이다.


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

leetcode 문제 사진

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

바로 한 번에 풀어버리는 간지


입력


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



풀이 및 코드


unique 한 원소들로만 이루어진 subarray 중 합이 가장 큰 것을 찾아 리턴하는 문제다.


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

투 포인터를 사용해서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int maximumUniqueSubarray(int[] nums) {
        boolean[] used = new boolean[100005];
        int left = 0, sum = 0, result = 0;
        
        for(int i = 0; i < nums.length; i++)
        {
            while(used[nums[i]])
            {
                sum -= nums[left];
                used[nums[left++]] = false;
            }
            
            used[nums[i]] = true;
            sum += nums[i];
            
            result = Math.max(result, sum);
        }
        
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘 외주 비스무리한 것을 통해서 돈을 받은 것과 문제를 단 한번의 코딩만에 풀어서 기분이 좋다.

내일도 이런 좋은 기분을 계속 느낄 수 있었으면 좋겠다.


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

2022년 06월 11일 토요일 - 외주 같은걸 해따..? 외주 맞나


오늘 올려볼 문제는 1658번 Minimum Operations to Reduce X to Zero 이라는 문제이다.


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

leetcode 문제 사진

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

와 내가 너무 어렵게 풀었더라


입력


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



풀이 및 코드


오른쪽 또는 왼쪽 subarray의 합이 x가 될 수 있는 가장 작은 길이를 구하여 리턴하는 문제다.


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

HashMap에 오른쪽 합과 index를 적어두고 for문으로 순회하면서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int minOperations(int[] nums, int x) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int sum = 0;
        
        map.put(0, 0);
        
        for(int i = 1; i <= nums.length; i++)
        {
            sum += nums[nums.length - i];
            map.put(sum, i);
        }
        
        int result = 1000000;
        
        sum = 0;
        
        if(map.containsKey(x)) result = map.get(x);
            
        for(int i = 0; i < nums.length; i++)
        {
            if(i > result) break;
            
            sum += nums[i];
            
            if(map.containsKey(x - sum) && i + 1 + map.get(x - sum) <= nums.length) result = Math.min(result, i + 1 + map.get(x - sum));
        }
        
        return result == 1000000 ? -1 : result;
    }
}




제출 화면

leetcode 문제 맞았습니다


문제를 풀고 discuss를 봤는데 훨씬 쉬운 방법이 있었다... 그냥 가운데 subarray의 합을 구하고 전체길이에서 빼기만 하면 됐던 것이다....

내일은 좀더 효율적으로 문제를 풀 수 있었으면 좋겠다.


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

2022년 06월 10일 금요일 - 금요일 너무 좋아!!


오늘 올려볼 문제는 3번 Longest Substring Without Repeating Characters 이라는 문제이다.


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

leetcode 문제 사진

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

풀었던 문제여따


입력


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



풀이 및 코드


substring 중에 가장 길고 중복된 원소를 가지지 않는 substring의 길이를 구하여 리턴하는 문제다.


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

boolean 배열을 만들어서 중복체크를 하고 포인터 2개를 사용해서 substring을 구했다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int lengthOfLongestSubstring(String s) {
        boolean[] selected = new boolean[256];
        int first = 0, second = 0, result = 0, sum = 0;
        
        if(s.length() == 0)
            return 0;
        
        
        for(first = 0; first < s.length(); first++)
        {
            if(!selected[s.charAt(first)])
            {
                selected[s.charAt(first)] = true;
                sum++;
                result = Math.max(sum, result);
            }
            else
            {
                while(s.charAt(first) != s.charAt(second++))
                {
                    selected[s.charAt(second - 1)] = false;
                    sum--;
                }
            }
        }
        
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


요즘 회사에서는 문제를 풀 시간이 없으니 생각하는 시간이 적어진 느낌이다.

내일은 주말이니 문제를 음미해봐야겠다.


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

2022년 06월 08일 수요일 - 갑자기 비가 오냐...


오늘 올려볼 문제는 1332번 Remove Palindromic Subsequences 이라는 문제이다.


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

leetcode 문제 사진

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

요즘 회사에서는 문제를 못 풀겠어


입력


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



풀이 및 코드


s에서 palindromic subsequences 를 찾아 없앤다고 할 때 모두 없애는데까지 최소한의 계산 개수를 구하여 리턴하는 문제다.


오늘은 시행착오를 좀 겪었다.

처음에는 그냥 subsequences를 직접 찾았다.

하지만 반례가 존재했고 다시 한 번 문제를 분석했다.

그랬더니 답이 1아니면 2밖에 안나오는 문제였다.

그래서 s 자체가 palindromic 한지 판단하여 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int removePalindromeSub(String s) {
        int left = 0, right = s.length() - 1;
        boolean flag = true;
        
        while(left <= right)
        {
            if(s.charAt(left++) != s.charAt(right--))
            {
                flag = false;
                break;
            }
        }
        
        return flag ? 1 : 2;
    }
}




제출 화면

leetcode 문제 맞았습니다


생각보다 어려운 문제인데 왜 easy인가 싶었지만 쉬운 문제가 맞았다...

내일도 이런 재밌는 문제가 나왔으면 좋겠다.


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

2022년 06월 07일 화요일 - 선배한테 밥 얻어먹어따!!!


오늘 올려볼 문제는 88번 Merge Sorted Array 이라는 문제이다.


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

leetcode 문제 사진

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

cosnt 메모리로 풀기는 귀찮아...


입력


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



풀이 및 코드


2개의 정렬된 배열중 각각 m, n개 의 원소들을 merge하여 nums1 배열에 저장하는 문제이다.


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

m + n 배열을 만들어서 merge 한 후 nums1 배열에 저장했다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int[] nums = new int[m + n];
        int index = 0, index1 = 0, index2 = 0;
        
        while(index1 < m && index2 < n)
        {
            nums[index++] = nums1[index1] < nums2[index2] ? nums1[index1++] : nums2[index2++];
        }
        
        while(index1 < m)
        {
            nums[index++] = nums1[index1++];
        }
        while(index2 < n)
        {
            nums[index++] = nums2[index2++];
        }
        
        for(int i = 0; i < nums.length; i++) nums1[i] = nums[i];
    }
}




제출 화면

leetcode 문제 맞았습니다


요즘 follow up을 지키면서 문제 푸는게 어려운 것 같다..

내일은 follow up이 있다면 지키면서 풀 수 있었으면 좋겠다.


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

2022년 06월 06일 월요일 - 글쓰는거 오랜만이야....


오늘 올려볼 문제는 160번 Intersection of Two Linked Lists 이라는 문제이다.


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

leetcode 문제 사진 leetcode 문제 사진

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

요즘 뇌가 굳은게 확실해 문제를 못 풀겠어


입력


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



풀이 및 코드


Linked List 들이 이어진 지점을 찾아서 리턴하는 문제다.


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

HashMap 사용해서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        HashMap<ListNode, Integer> map = new HashMap<>();

        while(headA != null)
        {
            map.put(headA, 0);
            headA = headA.next;
        }

        while(headB != null)
        {
            if(map.containsKey(headB)) return headB;
            headB = headB.next;
        }

        return null;
    }
}




제출 화면

leetcode 문제 맞았습니다


요즘 조금만 어려워도 문제를 못푸는 것 같아서 조금 두렵다..

좀더 열심히 노력해서 문제 푸는 감을 다시 돌려놔야겠다.


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

2022년 06월 02일 목요일 - 내일 쉰다 헤헤헿ㅎ헤헤헤헤ㅔㅔ헿헿


오늘 올려볼 문제는 867번 Transpose Matrix 이라는 문제이다.


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

leetcode 문제 사진

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

문제는 쉽지만 회사에서 풀 시간은 없었당


입력


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



풀이 및 코드


배열의 행과 열을 교환하여 리턴하는 문제다.


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

그냥 2중 for문 돌면서 index를 바꾸어서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int[][] transpose(int[][] matrix) {
        int[][] result = new int[matrix[0].length][matrix.length];

        for(int i = 0; i < matrix.length; i++)
        {
            for(int j = 0; j < matrix[0].length; j++)
            {
                result[j][i] = matrix[i][j];
            }
        }

        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


행과 열의 길이가 같은 줄 알았는데 아니어서 그냥 2중 for문으로 쉽게 풀었다.

내일은 재밌는 문제가 나왔으면 좋겠다.


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

2022년 05월 31일 화요일 - 내일 쉰다 헤헿


오늘 올려볼 문제는 1461번 Check If a String Contains All Binary Codes of Size K 이라는 문제이다.


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

leetcode 문제 사진

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

다른 사람들 풀이 보고 머리를 탁 쳐버렸다


입력


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



풀이 및 코드


k길이만큼 해당하는 이진수들을 주어진 String의 substring들로 모두 만들 수 있는지 판단하여 리턴하는 문제다.


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

이진수를 정수로 바꾸어 boolean 배열에 인덱스로 접근하여 true로 만드는 방식으로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public boolean hasAllCodes(String s, int k) {
        if(s.length() < k) return false;

        boolean[] check = new boolean[(int)Math.pow(2, k)];

        for(int i = 0; i <= s.length() - k; i++)
        {
            check[Integer.parseInt(s.substring(i, i + k), 2)] = true;
        }

        for(boolean flag : check) if(!flag) return false;

        return true;
    }
}




제출 화면

leetcode 문제 맞았습니다


다른 사람들의 문제풀이도 봤는데 HashSet을 사용하면 정수로 바꿀 필요도 없고 boolean 배열을 만들 필요도 없었다...

내일은 저렇게 멋있게 문제를 풀 수 있었으면 좋겠다.


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

+ Recent posts