어제 오랜만에 리트코드 문제를 풀어서 블로그를 올리려고 했는데 블로그가 올라가지 않았다.....

왜 안올라가나 확인해봤는데.... 

https://tistory.github.io/document-tistory-apis/

 

소개 · GitBook

No results matching ""

tistory.github.io

tstory open api가 운영 중단을 했던 것이어따..... 또르륵....

 

그래서 일단 api를 지원하는 medium으로 자동화 코드를 수정했다..

 

다만 code block에 highlight가 안되는 것이 너무 짜증나서... 나중에 다시 노션으로 갈아탈 수도 있다

 

https://medium.com/@kio4school

 

Ji-In Park – Medium

Read writing from Ji-In Park on Medium. Every day, Ji-In Park and thousands of other voices read, write, and share important stories on Medium.

medium.com

제 새로운 블로그입니다. 관심 있으시면 한 번씩 들러주세요.

 

그동안 고마웠다 티스토리

안녕~

2023년 11월 13일 월요일 - 아니 이게 얼마만이야!!


오늘 올려볼 문제는 2785번 Sort Vowels in a String 이라는 문제이다.


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

leetcode 문제 사진

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

진짜 오랜만에 푸는데 1트여서 기분 좋음 ㅋㅋ


입력


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



풀이 및 코드


주어진 String에서 모음만을 정렬해서 리턴하는 문제이다.


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

모음만 따로 저장해서 정렬하고 그 순서대로 채워주는 식으로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public String sortVowels(String s) {
        var set = new HashSet<Character>(Arrays.asList('A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'));
        var vowelArr = new ArrayList<Character>();
        var arr = s.toCharArray();
        
        for(var c : arr) 
            if(set.contains(c)) 
                vowelArr.add(c);
        
        Collections.sort(vowelArr);
        
        int index = 0;
        for(int i = 0; i < arr.length; i++) 
            if(set.contains(arr[i])) 
                arr[i] = vowelArr.get(index++);
        
        return new String(arr);
    }
}




제출 화면

leetcode 문제 맞았습니다


진짜 오랜만에 문제를 풀고 올리는데 느낌이 새롭다 ㅋㅋㅋㅋ

이제 프로젝트도 시작해보려고 하니 자주는 못올리겠지만 간간히 올려봐야지!!


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

나는 FlyIO를 애용하고 있다.

일단 프리티어가 토이 프로젝트 하는데는 매우 널널하고 배포 방법도 간단하여 굉장히 편리하게 cd를 구축할 수 있기 때문이다!

 

다만 FlyIO에서 제공하는 PostgreSQL DB를 사용하기에는 너무 알려진 정보가 없었다..

그래서 나와 같이 FlyIO 데이터베이스를 사용하고자 하는 사람들에게 수많은 시행착오 후에 터득하게 된 데이터베이스 연결방법을 공유하려고한다.

 

★ 참고 ★

Spring Boot에서 연결하는 것만을 중점적으로 설명하고 있습니다.

FlyIO에서 기본 제공하는 PostgreSQL에 대해서만 설명하고 있습니다.

 

  • 먼저 아래 명령어로 postgresql database를 만든다.
fly postgres create
  • 데이터베이스 생성이 완료되면 아래와 같은 db 정보가 나오게 되는데 이를 복사해둔다.
Postgres cluster {app name} created
  Username:    {username | 보통 postgres}
  Password:    {password | 랜덤하게 나옴}
  Hostname:    {app name}.internal
  Flycast:     {ip address}
  Proxy port:  5432
  Postgres port:  5433
  Connection string: postgres://postgres:{password}@{app name}.flycast:5432
  • connection string으로는 바로 접근이 불가능하다.
  • 또한 연결정보가 internal 즉 fly 내부에서 연결되도록 되어있기 때문에 연결은 어플리케이션을 fly에 올리고 연결하던가, 또는 db를 로컬로 연결하여 사용하는 방법이 있다.

1. fly에 올려서 연결하는 방법

  • 다른 것 없이 url에 이렇게 작성해주면 된다
jdbc:postgresql://{host name}:5432/?user={user name}&password={password}
  • connection string에 주어진 정보와는 꽤나 많이 달라서 여러번 시도해봤는데 이렇게 작성해주면 제대로 동작한다.
  • 아래는 예시 applciation.yml 이다.
spring:
  datasource:
    url: jdbc:postgresql://{host name}:5432/?user={user name}&password={password}
    username: {user name}
    password: {password}
    driver-class-name: org.postgresql.Driver
  jpa:
    hibernate:
      ddl-auto: update

2. 로컬에 db를 연결하여 확인하는 방법

  • 아래 명령어를 사용하면 된다.
fly proxy {port number} -a {app name}
  • 이 후 지정한 포트 번호로 연결하면 확인이 가능하다.

2023년 07월 10일 월요일 - 와아아악 오랜만!!


오늘 올려볼 문제는 111번 Minimum Depth of Binary Tree 이라는 문제이다.


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

leetcode 문제 사진

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

최근에 바쁘기도 했고... 문제가 어려워서 못풀기도 했고...


입력


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



풀이 및 코드


leaf node 중 root와 가장 가까운 node의 level을 구하는 문제이다.


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

dfs로 내려가면서 leaf node 일 때와 아닐 때를 분기처리하여 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null) return 0;
        
        var left = minDepth(root.left);
        var right = minDepth(root.right);
        
        if(left == 0 && right == 0) return 1;
        if(left != 0 && right != 0) return Math.min(left, right) + 1;
        
        return Math.max(left, right) + 1;
    }
}




제출 화면

leetcode 문제 맞았습니다


참 별의 별일이 다 있었다.

훈련소에서 귀가 조치도 당해보고 프로젝트도 다시 시작하고 등등

암튼 시간 날 때 블로그도 열심히 써봐야겠다!!

그럼 일단 fly 관련한 글부터 올려야지 ㅎㅎ


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

2023년 06월 07일 수요일 - 으어 오랜만에 회사가니깐 너무 힘들어..


오늘 올려볼 문제는 1318번 Minimum Flips to Make a OR b Equal to c 이라는 문제이다.


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

leetcode 문제 사진

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

생각보다 쉽게 풀림


입력


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



풀이 및 코드


a와 b를 or 연산했을 때 c를 만들기 위해서 a와 b의 비트를 뒤집을 때 가장 적게 뒤집는 수를 구하는 문제이다.


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

어차피 or 연산이므로 각자리의 비트가 다른 자리의 비트에 영향을 주지 못한다.

즉 맨 끝의 비트만 비교하면서 뒤집을 개수를 구하는 식으로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int minFlips(int a, int b, int c) {
        int result = 0;
        
        while(a > 0 || b > 0 || c > 0) {
            int ar = a % 2, br = b % 2, cr = c % 2;
            a >>= 1; b >>= 1; c >>= 1;
            if(cr == (ar | br)) continue;
            
            if(cr == 1) result++;
            else result += ar + br;
        }
        
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


자꾸 블로그 쓰는걸 까먹는거 같다.

요즘따라 집에서 놀기만 하고 싶어진달까나?


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

2023년 06월 04일 일요일 - 낚시가 안된다~~


오늘 올려볼 문제는 547번 Number of Provinces 이라는 문제이다.


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

leetcode 문제 사진

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

오랜만에 빨리 푼듯.. ㅋㅋㅋㅋ


입력


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



풀이 및 코드


도시들의 연결정보가 주어졌을 때 각 집합의 개수가 몇개인지 구하는 문제이다.


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

union find를 활용해서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int findCircleNum(int[][] isConnected) {
        int n = isConnected.length;
        var arr = new int[n];
        for(int i = 0; i < n; i++) arr[i] = i;
        
        for(int i = 0; i < n; i++) {
            for(int j = i + 1; j < n; j++) {
                if(isConnected[i][j] == 1) {
                    int a = find(arr, i), b = find(arr, j);
                    
                    if(a < b) arr[b] = a;
                    else arr[a] = b;
                }
            }
        }
        
        var set = new HashSet<Integer>();
        for(int i = 0; i < n; i++) set.add(find(arr, i));
        
        return set.size();
    }
    
    private int find(int[] arr, int n) {
        if(arr[n] == n) return n;
        
        return arr[n] = find(arr, arr[n]);
    }
}




제출 화면

leetcode 문제 맞았습니다


오랜만에 정석같은 문제가 나와서 안틀리고 바로 풀 수 있었던 것 같다.


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

2023년 06월 02일 금요일 - 오 6월이네..?


오늘 올려볼 문제는 2101번 Detonate the Maximum Bombs 이라는 문제이다.


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

leetcode 문제 사진

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

아니 요즘 블로그 쓰는걸 완전 까먹어


입력


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



풀이 및 코드


각 좌표들이 폭탄의 중심과 폭발 반경을 나타낸다.

한 폭탄을 터뜨렸을 때 최대한 많이 폭탄을 터뜨릴 수 있는 개수를 구하는 문제이다.


오늘은 조금 헤매다가 문제를 풀었다.

처음에는 union find를 사용하려고 했는데 생각해보니 union find를 하게되면 첫 번째 폭발에 연쇄되어서 폭발하는지 판별이 불가능 했다.

그래서 이후에는 dfs를 활용해서 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int maximumDetonation(int[][] bombs) {
        var set = new HashSet<Integer>();
        int result = 0;
        
        for(int i = 0; i < bombs.length; i++) {
            if(set.contains(i)) continue;
            
            var dfsSet = dfs(bombs, new HashSet<>(), i);
            
            result = Math.max(result, dfsSet.size());
            
            for(var num : dfsSet) set.add(num);
        }
        
        return result;
    }
    
    private HashSet<Integer> dfs(int[][] bombs, HashSet<Integer> set, int now) {
        set.add(now);
        
        for(int i = 0; i < bombs.length; i++) {
            if(set.contains(i)) continue;
            
            var a = bombs[now];
            var b = bombs[i];
            
            long length = a[2], x = Math.abs(a[0] - b[0]), y = Math.abs(a[1] - b[1]);
            
            if(length * length >= x * x + y * y) dfs(bombs, set, i);
        }
        
        return set;
    }
}




제출 화면

leetcode 문제 맞았습니다


시간 좀 줄여보겠다고 union find를 생각하고 거기에 얽매여서 생각보다 푸는데 오래걸렸다.

다음에는 조금 더 유연하게 생각해봐야겠다.


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

2023년 05월 19일 금요일 - 너무 오랜만에 쓰는구만?


오늘 올려볼 문제는 785번 Is Graph Bipartite? 이라는 문제이다.


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

leetcode 문제 사진

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

으어 이번주 너무 길어


입력


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



풀이 및 코드


입력으로 들어온 그래프가 Bipartite인지 판단하는 문제다.


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

BFS로 level단위를 돌면서 컬러링을 진행하는 식으로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public boolean isBipartite(int[][] graph) {
        var arr = new Boolean[graph.length];
        var visit = new boolean[graph.length];
        var q = new LinkedList<Integer>();
        
        for(int i = 0; i < graph.length; i++) {
            if(arr[i] != null) continue;
            q.add(i);
            arr[i] = true;
            
            while(!q.isEmpty()) {
                var now = q.poll();

                if(visit[now]) continue;

                visit[now] = true;

                for(var child: graph[now]) {
                    if(arr[child] == null) arr[child] = !arr[now];
                    else if(arr[child] == arr[now]) return false;

                    q.add(child);
                }
            }
        }
        
        return true;
    }
}




제출 화면

leetcode 문제 맞았습니다


요즘 자꾸 블로그 쓰는걸 까먹어서 오랜만에 올려본다!


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

+ Recent posts