2022년 05월 26일 목요일 - 피곤해애애애애애애


오늘 올려볼 문제는 191번 Number of 1 Bits 이라는 문제이다.


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

leetcode 문제 사진

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

요즘 너무 쉬운 문제 아니면 못풀겠어....


입력


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



풀이 및 코드


해당 숫자를 2진수로 표현했을 때 1의 개수를 구하여 리턴하는 문제다.


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

비트연산자를 사용해서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

public class Solution {
    public int hammingWeight(int n) {
        int result = 0;
        while(n != 0)
        {
            result += n & 1;
            n >>>= 1;
        }
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


요즘 문제 푸는데 뭔가 귀찮은 느낌이 많이 든다.

내일은 좀 흥미가 돌아왔으면 좋겠다.


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

2022년 05월 24일 화요일 - 힘이 든다 힘이 드러~~~


오늘 올려볼 문제는 32번 Longest Valid Parentheses 이라는 문제이다.


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

leetcode 문제 사진

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

오늘은 문제가 풀려있었다... ㅋㅋㅋㅋ


입력


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



풀이 및 코드


가장 긴 유효한 괄호의 길이를 찾아서 리턴하는 문제다.


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

스택을 사용하면서 유효한 괄호를 찾아냈고 이 괄호들을 모아서 나중에 합쳐주는 과정을 통해서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int longestValidParentheses(String input) {
        int result = 0;
        Stack<Integer> s = new Stack<Integer>();
        ArrayList<pair> arr = new ArrayList<pair>();

        for(int i = 0; i < input.length(); i++)
        {
            if(input.charAt(i) == '(')
            {
                s.push(i);
            }
            else
            {
                if(s.isEmpty())
                {
                    continue;
                }
                else
                {
                    int nowFirst = s.pop();
                    arr.add(new pair(nowFirst, i));
                }
            }
        }

        Collections.sort(arr);

        for(int i = 0; i < arr.size() - 1; i++)
        {
            result = Math.max(result, arr.get(i).last - arr.get(i).first + 1);

            pair temp1 = arr.get(i);
            pair temp2 = arr.get(i + 1);

            if(temp1.last == temp2.first - 1)
            {
                arr.get(i).last = temp2.last;
                arr.remove(i + 1);
                i--;
            }
            else if(temp1.first < temp2.first && temp2.last < temp1.last)
            {
                arr.remove(i + 1);
                i--;
            }
        }

        if(arr.size() != 0)
            result = Math.max(result, arr.get(arr.size() - 1).last - arr.get(arr.size() - 1).first + 1);

        return result;
    }

    class pair implements Comparable<pair>
    {
        int first, last;
        public pair(int first, int last)
        {
            this.first = first;
            this.last = last;
        }

        @Override
        public int compareTo(pair p)
        {
            return this.first - p.first;
        }
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘은 문제가 이미 풀려있어서 고민할 시간이 없었다.

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


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

2022년 05월 21일 토요일 - 너무 오랜만에 쓰네요 하하


오늘 올려볼 문제는 322번 Coin Change 이라는 문제이다.


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

leetcode 문제 사진

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

오늘은 기본 dp인데도 좀 힘드네... 머리가 굳은듯


입력


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



풀이 및 코드


주어진 동전들을 가장 적게 써서 amount를 만들 수 있는지 판단하고 만들 수 있다면 개수를 리턴하는 문제다.


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

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


이제 코드를 봐보자!


풀이코드

class Solution {
    public int coinChange(int[] coins, int amount) {
        int[] dp = new int[amount + 5];
        Arrays.fill(dp, 100000);
        dp[0] = 0;

        for(int i = 0; i <= amount; i++)
        {
            if(dp[i] != 100000)
            {
                for(int coin : coins)
                {
                    if(coin > amount - i) continue;

                    dp[i + coin] = Math.min(dp[i] + 1, dp[i + coin]);
                }
            }
        }

        return dp[amount] == 100000 ? -1 : dp[amount];
    }
}




제출 화면

leetcode 문제 맞았습니다


요즘 머리가 굳었는지 이런 기본 dp문제도 좀 힘들게 푸는 것 같다..

내일은 좀 어려운 문제가 나와서 내 뇌를 좀 풀어주면 좋겠다.


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

2022년 05월 16일 월요일 - 월요일 시러


오늘 올려볼 문제는 1091번 Shortest Path in Binary Matrix 이라는 문제이다.


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

leetcode 문제 사진 leetcode 문제 사진

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

오늘 일하기 넘 시러씀


입력


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



풀이 및 코드


맨 끝부터 끝까지 가장 빠른길로 갔을 때 얼마나 걸리는 지 구하여 리턴하는 문제다.


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

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


이제 코드를 봐보자!


풀이코드

class Solution {
    public int shortestPathBinaryMatrix(int[][] grid) {
        if(grid[0][0] != 0) return -1;

        int[] xdir = {1, 0, -1, 1, 0, -1, 1, 0, -1};
        int[] ydir = {1, 1, 1, 0, 0, 0, -1, -1, -1};
        boolean[][] visit = new boolean[grid.length][grid[0].length];

        Queue<point> q = new LinkedList<>();
        q.add(new point(0, 0));

        int result = 0;

        while(!q.isEmpty())
        {
            int size = q.size();

            result++;

            for(int i = 0; i < size; i++)
            {
                point now = q.poll();

                if(visit[now.y][now.x]) continue;

                visit[now.y][now.x] = true;

                if(now.y == grid.length - 1 && now.x == grid[0].length - 1) return result;

                for(int y : ydir)
                {
                    for(int x : xdir)
                    {
                        int tempy = y + now.y;
                        int tempx = x + now.x;

                        if(0 <= tempy && tempy < grid.length)
                            if(0 <= tempx && tempx < grid[0].length)
                                if(grid[tempy][tempx] == 0)
                                    q.add(new point(tempx, tempy));

                    }
                }
            }
        }

        return -1;
    }

    class point{
        int x, y;

        public point(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘은 문제가 조금 귀찮아서 푸는데 시간이 좀 걸렸다.

내일은 좀 덜 귀찮으면서 재밌는 문제가 나왔으면 좋겠다.


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

2022년 05월 15일 일요일 - 뭔가 오랜만에 쓰는 느낌이넹


오늘 올려볼 문제는 1302번 Deepest Leaves Sum 이라는 문제이다.


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

leetcode 문제 사진

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

보자마자 풀었지렁이


입력


사진에서도 볼 수 있듯이 Binary Tree의 Root Node 가 입력으로 들어온다.



풀이 및 코드


깊이가 가장 깊은 노드들의 합을 구하여 리턴하는 문제다.


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

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


이제 코드를 봐보자!


풀이코드

class Solution {
    public int deepestLeavesSum(TreeNode root) {
        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);
        int result = 0;

        while(!q.isEmpty())
        {
            int size = q.size();
            result = 0;

            for(int i = 0; i < size; i++)
            {
                TreeNode now = q.poll();

                result += now.val;

                if(now.left != null) q.add(now.left);
                if(now.right != null) q.add(now.right);
            }
        }

        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘 문제는 너무 쉬어따...

내일은 적당히 어려운 문제가 나왔으면 좋겠다!


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

2022년 05월 13일 금요일 - 꿀맛같은 금욜!


오늘 올려볼 문제는 117번 Populating Next Right Pointers in Each Node II 이라는 문제이다.


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

leetcode 문제 사진

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

아뉘 이상한거에서 자꾸 걸려씀


입력


사진에서도 볼 수 있듯이 Binaray Tree의 root가 입력으로 들어온다.



풀이 및 코드


같은 레벨에 있는 오른쪽 노드를 next에 바인딩하여 리턴하는 문제다.


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

왼쪽부터 탐색하는 bfs로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public Node connect(Node root) {
        if(root == null) return root;

        Queue<Node> q = new LinkedList<>();
        q.add(root);

        while(!q.isEmpty())
        {
            int size = q.size();

            for(int i = 0; i < size; i++)
            {
                Node now = q.poll();

                now.next = i == size - 1 ? null : q.peek();

                if(now.left != null) q.add(now.left);
                if(now.right != null) q.add(now.right);
            }
        }

        return root;
    }
}




제출 화면

leetcode 문제 맞았습니다


사실 follow up으로 풀고 싶었는데 너무 어려워서 그냥 O(N) 메모리로 풀었다.

내일은 follow up이 있다면 follow up으로 문제를 풀 수 있었으면 좋겠다.


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

2022년 05월 11일 수요일 - 지구 상사 가봐따!


오늘 올려볼 문제는 1641번 Count Sorted Vowel Strings 이라는 문제이다.


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

leetcode 문제 사진

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

1줄 컷


입력


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



풀이 및 코드


모음으로만 이루어진 길이 n인 string을 몇개 만들 수 있는지 구하여 리턴하는 문제다.


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

중복조합을 사용했다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int countVowelStrings(int n) {
        return (n + 4) * (n + 3) * (n + 2) * (n + 1) / 24;
    }
}




제출 화면

leetcode 문제 맞았습니다


수학을 못해서 구글링해서 중복조합 찾아서 풀었다.

내일은 깔쌈하게 풀 수 있는 문제가 나왔으면 좋겠다.


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

2022년 05월 10일 화요일 - 기침이 오늘도 안멈춰...


오늘 올려볼 문제는 216번 Combination Sum III 이라는 문제이다.


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

leetcode 문제 사진

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

요즘 회사에서 문제 풀 시간이 없네..


입력


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



풀이 및 코드


1 ~ 9 까지의 숫자를 1개씩만 사용해 k개 만큼 합해서 n이 나오는 경우의 수를 모두 구하고 리턴하는 문제다.


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

제약 조건이 매우 작기 때문에 백트래킹을 사용해서 브루트 포스로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    int n;
    public List<List<Integer>> combinationSum3(int k, int n) {
        this.n = n;

        solve(k, 1, 0, new Stack<Integer>());

        return result;
    }

    public void solve(int k, int num, int sum, Stack<Integer> s)
    {
        if(sum > n) return;

        if(sum == n)
        {
            if(k != 0) return;

            result.add(new ArrayList(s));
        }

        for(int i = num; i <= 9; i++)
        {
            s.push(i);
            solve(k - 1, i + 1, sum + i, s);
            s.pop();
        }
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘은 아마 제약조건이 좀만 더 컸다면 어렵지 않았을까 생각되는 문제였다.

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


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

+ Recent posts