문제 자체는 매우 간단한 편이지만 DFS를 주어진 메서드 자체를 recursion하는 경우를 기록에 남겨둔다. dfs는 콜스택이거나 스택구조를 이용하는 것이므로 dfs 메서드를 굳이 만들지 않고 기존의 메서드를 recursive하게 호출해서 실행하여도 된다. class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) return null; TreeNode temp = root.left; root.left = root.right; root.right = temp; invertTree(root.left); invertTree(root.right); return root; } }
시간복잡도는 divide 하는데 O(n) merge 하는데 O(nlogn)으로 O(n) + O(nlogn)이므로 O(nlogn). 다만 공간복잡도는 O(logn)으로 O(1)인 풀이방법도 있었지만 적용하기에 너무 복잡하다고 판단했다. 크게 base cases를 처리하는 부분 middle node를 구하고 divide하는 부분. divide들을 merge하는 부분으로 나눌 수 있다. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode nex..
class Solution { public boolean canPartition(int[] nums) { int sum = 0; for (int i : nums) { sum += i; } if (sum % 2 != 0) return false; sum /= 2; //decided whether it could be partitioned or not. //initialize the dp array size + 1 because there is an option sum nothing from the array and it will be always true. boolean[] dp = new boolean[sum + 1]; dp[0] = true; //iterate the nums loop for (int ..
import java.util.*; import java.util.stream.Collectors; class Solution { static char[] prior = {'+', '-', '*'}; static boolean[] check = new boolean[3]; static List nums = new ArrayList(); static List ops = new ArrayList(); static long answer; static void dfs(int count, char[] perm) { if (count == 3) { var copyNums = new ArrayList(nums); var copyOps = new ArrayList(ops); //연산자가 우선순위에 따라 담겨있는 배열 ..
BFS와 기본적인 흐름은 거의 비슷하지만 BFS는 인접한 노드를 반복하며 큐에 쌓고 큐를 소모할 때까지 iteration을 반복하며 재귀적으로 호출하지 않고 DFS는 자기 자신을 재귀적으로 호출하며 콜스택에 쌓는 방식으로 구현한다. DFS와 BFS에서 가장 중요한 것은 언제 어떤 조건으로 빠져나가는지를 결정하는 것이고 전체적인 흐름은 거의 비슷한 양상을 보이는 것같다. 해당 문제의 경우 static int numberOfArea; static int maxSizeOfOneArea; 와 같이 전역 변수로 꺼내는 경우 메인 메서드 내에서 다시 한번 초기화를 해야한다. 프로그래머스 사이트 자체에 버그가 있다고 한다. class Solution { static int numberOfArea; static int..
https://school.programmers.co.kr/learn/courses/30/lessons/81302?language=java#fnref1 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr BFS의 흐름은 거의 정석화되어 있기 때문에 BFS의 코드를 완벽히 외우는 것이 가장 중요하다. import java.util.*; class Solution { class Point { int row, col, dist; Point(int row, int col, int dist) { this.row = row; this.col = col; this.dist..
기존의 빌드 이후 실행되던 쉘스크립트는 빌드와 실행 자체는 잘 되지만 기존에 존재하던 이미지와 컨테이너를 삭제하지 못 하고 계속해서 증식하던 문제가 발생했다. 기존 쉘스크립트는 올릴 필요가 없을 정도로 완벽하게 깔끔한 정답을 찾아서 공유한다! 쉘스크립트 cd ~/deploy docker-compose pull docker-compose up -d --remove-orphans yes | docker image prune 1. docker-compose.yml이 존재하는 폴더의 위치로 이동하고 2. 이미지를 새로 받아온다 3. 컨테이너를 재시작한다. 어디에도 연결되지 않은 컨테이너는 여기서 삭제된다. 4. yes | docker image prune은 사용되고 있지 않은 이미지를 삭제하는 과정인데 꼭 필요..
문제 배포 환경과 개발 환경이 달라짐에 따라 기존에 개발 환경에서만 사용하던 URL들을 환경변수로 꺼내서 개발, 배포 환경에 따라 다르게 값이 들어가야 했다. application.properties에 url을 꺼내 @Value("${host.url}")로 선언하고 사용하는 방법으로 사용하고자 결정했고 그대로 구현하였으나 아래와 같은 에러가 발생하며 프로젝트가 빌드되지 않는 문제가 발생했다. Parameter 0 of constructor in required a bean of type 'java.lang.String' that could not be found @Service @Transactional @AllArgsConstructor public class ItemService { @Value("$..
개발 서버와 운영 서버가 다른 경우 개발 서버에서 젠킨스를 통해 빌드하고 운영 서버에 커맨드나 빌드 파일을 보내게 된다. 본인은 도커 허브에 이미지를 올리고 운영 서버에는 쉘스크립트만 보내 도커허브에서 이미지를 받아 사용하도록 하고자 했었는데 다음과 같은 오류가 발생하였다. ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]] Build step 'Send build artifacts over SSH' changed build result to UNSTABLE 이때 본인은 젠킨스를 통해 단 한줄의 명령어만 보내고 있었다. docker-compose up -d 너무 당연히 발생한 문제로 docke..
도커로 nginx를 설정해주는 방법은 크게 2가지 단계로 볼 수 있다. 1. nginx의 설정파일인 /etc/nginx/nginx.conf 수정하기 2. docker-compose.yml 작성 후 up 하기 nginx.conf 작성 /etc/nginx/nginx.conf 는 위치와 파일명이 정해져있는 값으로 디폴트로 파일이 주어지지만 크게 의미있는 내용은 존재하지 않아 아예 다른 곳에 nginx.conf 파일을 새로 작성해서 container가 올라갈때 mount해주는 것이 편하다. 마운트될 nginx.conf는 어떤 위치에 작성해도 상관없으나 docker-compose.yml과 같은 디렉토리 혹은 그 밑에 있는 것이 관리측면에서 더 편할 것이라 생각하여 deploy 내에 docker-compose.ym..
- Total
- Today
- Yesterday
- RequestBody
- ModelAttribute
- 아키텍처
- 루나빔
- RequestParam
- JavaScript
- lunarvim
- 레디스
- vim
- 도커
- Dap
- neovim
- IDE
- RequestPart
- 배포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |