2023년 04월 28일 금요일 - 4월이 가기 전에 한 번 올립니다~


오늘 올려볼 문제는 839번 Similar String Groups 이라는 문제이다.


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

leetcode 문제 사진

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

오늘 대체 문제가 더 어려웠다....


입력


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



풀이 및 코드


string 2개를 비교했을 때 인덱스 2개에 해당하는 원소를 교체했을 때 같거나 처음부터 같다면 같은 집합에 포함한다고 했을 때 집합의 개수를 구하는 문제이다.


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

dfs로 직접 비교해가면서 문제를 풀었다.

또한 시간을 줄이기 위해서 set을 사용했다.


이제 코드를 봐보자!


풀이코드

class Solution {
    HashSet<String> set = new HashSet<>();
    String[] strs;
    public int numSimilarGroups(String[] strs) {
        this.strs = strs;
        int result = 0;
        
        for(var str: strs) {
            if(set.contains(str)) continue;
            solve(str);
            result++;
        }
        
        return result;
    }
    
    private void solve(String str1) {
        set.add(str1);
        var arr1 = str1.toCharArray();
        
        for(var str2: strs) {
            if(set.contains(str2)) continue;
            
            var arr2 = str2.toCharArray();
            
            int diff = 0;
            for(int i = 0; i < arr1.length && diff <= 2; i++)
                if(arr1[i] != arr2[i]) diff++;

            
            if(diff == 2) solve(str2);
        }
    }
}




제출 화면

leetcode 문제 맞았습니다


오랜만에 블로그를 쓰는데 뭔가 느낌이 묘하다 ㅋㅋㅋ


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

2023년 04월 18일 화요일 - 스터디원++


오늘 올려볼 문제는 1768번 Merge Strings Alternately 이라는 문제이다.


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

leetcode 문제 사진

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

1분컷


입력


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



풀이 및 코드


String 2개를 원소 하나하나씩 교차하면서 합치고 리턴하는 문제이다.


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

그냥 코드로 보면 될 듯.


이제 코드를 봐보자!


풀이코드

class Solution {
    public String mergeAlternately(String word1, String word2) {
        int i1 = 0, i2 = 0;
        var sb = new StringBuilder();
        
        while(i1 < word1.length() && i2 < word2.length()) {
            sb.append(word1.charAt(i1++));
            sb.append(word2.charAt(i2++));
        }
        
        while(i1 < word1.length()) sb.append(word1.charAt(i1++));
        while(i2 < word2.length()) sb.append(word2.charAt(i2++));
        
        return sb.toString();
    }
}




제출 화면

leetcode 문제 맞았습니다


스터디원이 늘었다!!

더 열심히 해보자!!


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

2023년 04월 12일 수요일 - 숏트랙 힘드러!!


오늘 올려볼 문제는 71번 Simplify Path 이라는 문제이다.


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

leetcode 문제 사진

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

요즘 문제가 딱 yb 문제들인데... 시험기간인게 아쉽네요


입력


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



풀이 및 코드


절대 경로로 작성된 경로를 간단하게 바꾸는 문제이다.


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

스택 사용해서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public String simplifyPath(String path) {
        var arr = path.split("/");
        var d = new ArrayDeque<String>();
        
        for(var p : arr) {
            if(p.isEmpty() || p.equals(".")) continue;
            else if(p.equals("..")) {if(!d.isEmpty()) d.pollLast();}
            else d.addLast(p);
        }
        
        var sb = new StringBuilder();
        while(!d.isEmpty()) {
            sb.append("/");
            sb.append(d.pollFirst());
        }
        
        return sb.isEmpty() ? "/" : sb.toString();
    }
}




제출 화면

leetcode 문제 맞았습니다


요즘 문제가 딱 yb 문제들인데 시험기간이라서 다들 못 푸는게 아쉽구만요..


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

2023년 04월 11일 화요일 - T1 고생 많았습니다.


오늘 올려볼 문제는 2390번 Removing Stars From a String 이라는 문제이다.


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

leetcode 문제 사진

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

숏트랙 힘드러


입력


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



풀이 및 코드


가장 왼쪽에 있는 * 부터 없애는 데 없앨 때는 * 왼쪽에 있는 문자 1개도 같이 지운다.

모든 별을 지웠을 때 남아있는 String을 리턴하는 문제이다.


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

Deque 사용해서 * 지울 때는 stack 처럼 쓰다가 String을 만들때는 queue처럼 썼다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public String removeStars(String s) {
        var d = new ArrayDeque<Character>();
        for(var c : s.toCharArray()) {
            if(c == '*') d.pollLast();
            else d.addLast(c);
        }
        
        var sb = new StringBuilder();
        while(!d.isEmpty()) sb.append(d.pollFirst());
        
        return sb.toString();
    }
}




제출 화면

leetcode 문제 맞았습니다


T1이 아쉽게 준우승을 해서 너무 아쉽다.

최근 계속 결승전에서 아쉬운 결과가 나와서 너무 속상하다..

msi 때는 한 번 우승해보자!!


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

2023년 04월 08일 토요일 - 토요일 조아~~


오늘 올려볼 문제는 133번 Clone Graph 이라는 문제이다.


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

leetcode 문제 사진

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

젠지.. 또 너냐..?


입력


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



풀이 및 코드


Node로 이루어진 Graph를 deep copy하는 문제이다.


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

노드에 들어있는 value가 unique하니 value를 key로 한 HashMap을 만들어 복사본을 저장해두고 dfs를 하면서 그래프 모양을 복사하는 식으로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    HashMap<Integer, Node> map = new HashMap<>();
    public Node cloneGraph(Node node) {
        if(node == null) return null;
        if(map.containsKey(node.val)) return map.get(node.val);
        
        var clone = new Node(node.val);
        map.put(node.val, clone);
        for(var neighbor: node.neighbors) {
            var clonedNeigbor = cloneGraph(neighbor);
            clone.neighbors.add(clonedNeigbor);
        }
        
        return clone;
    }
}




제출 화면

leetcode 문제 맞았습니다


내일은 2023 LCK 스프링 결승전...

T1 VS Gen

T1 가보자고!!!


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

2023년 04월 07일 금요일 - 히히 오늘 생일입니다!


오늘 올려볼 문제는 1020번 Number of Enclaves 이라는 문제이다.


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

leetcode 문제 사진

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

순간 어제 문제랑 뭐가 다른지 몰랐다...


입력


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



풀이 및 코드


1로 이루어진 섬들의 크기를 구하는데 섬이 0으로만 둘러싸여져 있는 섬이어야한다.


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

bfs로 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int numEnclaves(int[][] grid) {
        int result = 0, c = grid.length, r = grid[0].length;
        var dirs = new int[][] {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
        var visit = new boolean[c][r];
        
        for(int i = 0; i < c; i++) {
            for(int j = 0; j < r; j++) {
                if(visit[i][j] || grid[i][j] == 0) continue;
                var flag = true;
                int count = 0;
                var q = new LinkedList<int[]>();
                q.add(new int[]{i, j});
                while(!q.isEmpty()) {
                    var now = q.poll();
                    if(now[0] < 0 || now[0] >= c || now[1] < 0 || now[1] >= r) continue;
                    if(visit[now[0]][now[1]] || grid[now[0]][now[1]] == 0) continue;
                    if(now[0] == 0 || now[0] == c - 1 || now[1] == 0 || now[1] == r - 1) flag = false;
                    
                    visit[now[0]][now[1]] = true;
                    count++;
                    
                    for(var d : dirs) q.add(new int[]{now[0] + d[0], now[1] + d[1]});
                }
                
                if(flag) result += count;
            }
        }
        
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


오늘 생일!

기분 좋아!


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

2023년 04월 06일 목요일 - 왜 아직 목욜?


오늘 올려볼 문제는 1254번 Number of Closed Islands 이라는 문제이다.


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

leetcode 문제 사진

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

이런 문제는 너무 쉽지


입력


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



풀이 및 코드


1로 둘러싸여 있는 0으로만 이루어져있는 섬의 개수를 구하는 문제이다.


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

0으로 이루어진 섬은 bfs로 구한다.

1로 둘러싸여 있어야 하므로 해당 섬이 맨끝에 하나라도 위치하면 세지 않는다.

한 번 탐색한 곳은 다시 탐색하지 않는다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int closedIsland(int[][] grid) {
        int c = grid.length, r = grid[0].length, result = 0;
        var dir = new int[][] {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        var visit = new boolean[c][r];
        
        for(int i = 0; i < c; i++) {
            for(int j = 0; j < r; j++) {
                if(visit[i][j] || grid[i][j] == 1) continue;
                
                var isIsland = true;
                var q = new LinkedList<int[]>();
                q.add(new int[]{i, j});
                while(!q.isEmpty()) {
                    var now = q.poll();
                    if(now[0] < 0 || now[0] >= c || now[1] < 0 || now[1] >= r) continue;
                    if(visit[now[0]][now[1]] || grid[now[0]][now[1]] == 1) continue;
                    if(now[0] == 0 || now[0] == c - 1 || now[1] == 0 || now[1] == r - 1) isIsland = false;
                    
                    visit[now[0]][now[1]] = true;
                    
                    for(var d : dir) q.add(new int[]{now[0] + d[0], now[1] + d[1]});
                }
                
                if(isIsland) result++;
            }
        }
        
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


빨리 주말이 왔으면 좋겠다!


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

2023년 04월 05일 수요일 - 왜 아직 수욜?


오늘 올려볼 문제는 2439번 Minimize Maximum of Array 이라는 문제이다.


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

leetcode 문제 사진

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

아니 오버플로 형!!!!


입력


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



풀이 및 코드


1 <= i < n일 때 nums[i]를 1 내리고 nums[i - 1]를 1 올리는 연산을 할 수 있다.

연산을 할 수 있는 횟수는 무한하다고 했을 때 연산을 끝낸 후 배열에 남아있는 최댓값을 구한다고 했을 때 만들 수 있는 최대값의 최소값을 구하는 문제이다.


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

어차피 오른쪽에 있는 것을 왼쪽으로 전파할 수 있는 것이므로 하나씩 나아가면서 평균을 구하는 방식으로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int minimizeArrayValue(int[] nums) {
        long sum = 0, max = 0;
        
        for(int i = 0; i< nums.length; i++) {
            sum += nums[i];
            max = Math.max(max, sum / (i + 1) + (sum % (i + 1) > 0 ? 1 : 0));
        }
        
        return (int)max;
    }
}




제출 화면

leetcode 문제 맞았습니다


아니 오버플로 하나 생각을 못해서 30분을 날렸다;;


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

+ Recent posts