본문 바로가기

분류 전체보기

(124)
[Java] 2021 위클리 챌린지 9주차 - 전력망을 둘로 나누기 Node라는 클래스를 만들어서 wire로 연결된 송전탑들을 연결을 시켜준다. 이후 어떤 wire를 제거하였을 때, 차가 최소가 되는지 모르기 때문에 각 wire들을 순회하면서 제거한다. 그리고 bfs를 이용해서 각 송전탑들이 몇개가 연결이 되었는지 구하고, 두 그룹의 차이를 출력하면 된다. class Node { int id; List children; public Node(int id) { this.id = id; children = new ArrayList(); } } class Solution { public int solution(int n, int[][] wires) { int answer = n; Node[] nodeArr = new Node[n + 1]; for (int i = 0; i
[Java] LeetCode 39번 Combination Sum DP를 이용해서 해결하였다. map에 key는 숫자, value에는 더해서 key를 만들 수 있는 리스트를 저장하였다. 0부터 target까지 만들 수 있는 숫자의 조합을 계속 더해가면서 문제를 해결하엿다. class Solution { public List combinationSum(int[] candidates, int target) { Map map = new HashMap(); for (int i = 0; i = 0) { List beforeList = map.get(idx); if (beforeList != null) { List curList = map.getOrDefault(i, new ArrayList()); for (int k = 0; k < beforeList.size(); k++) {..
[Java] LeetCode 34번 Find First and Last Position of Element in Sorted Array 정렬된 배열에서 target이 위치하는 첫번째 위치와 마지막 위치를 구하는 문제이다. 정렬이 되어있으므로 이분 탐색을 사용할 수 있다. 일반적인 이분탐색으로 찾되, 타겟보다 크거나 같은 부분에서 일치하는 것을 찾게 되면 시작점이 되고, 타겟보다 작거나 같은 부분에서 일치하는 부분을 찾게되면 마지막점이 된다. class Solution { public int[] searchRange(int[] nums, int target) { int n = nums.length; int l = 0; int r = n - 1; int[] answer = { -1, -1 }; while (l
[Java] LeetCode 33번 Search in Rotated Sorted Array 로테이션이 되어있으면 숫자를 오름차순의 구역 두개의 구역으로 나누어서 생각할 수 있다. 왼쪽의 첫번째가 무조건 첫번째의 숫자가 오른쪽 구역의 첫번째 숫자보다 크게된다. 이 지점을 binary search로 찾는다. 오른쪽 구역의 시작 점을 turnPoint라는 변수에 저장하였다. 이제 왼쪽과 오른쪽 구역에서 각각 일치하는 숫자의 index를 찾고 이것을 return 해주면 된다. class Solution { public int search(int[] nums, int target) { int first = nums[0]; int n = nums.length; int l = 1; int r = n - 1; int turnPoint = 0; int answer = -1; while (l
Liquibase Liquibase 란 Liquibase는 데이터베이스 스키마 변경 관리 솔루션이며, 개발부터 프로덕션까지 데이터베이스 변경을 더 빠르고 안전하게 수정하고 배포하는 데 도움이 된다. SQL, XML, JSON, YAML과 같은 다양한 형식을 사용하여 데이터베이스 변경 내용을 정의하고 추적할 수 있다. 또한, Liquibase는 "rollback" 기능을 제공하여 변경사항을 쉽게 되돌릴 수 있다. 일부 변경사항은 자동으로 rollback SQL을 생성하지만, 테이블 삭제나 데이터 추가와 같은 변경사항은 직접 rollback 태그를 작성하여 구문을 지정해야 한다. Liquibase는 주로 6가지 기본 커맨드를 제공한다: update, rollback, snapshot, diff, status, 그리고 util..
[Java] LeetCode 25번 Reverse Nodes in k-Group 먼저 list를 reverse하는 함수를 만들고, K개의 node를 만나면 reverse를 한다. reverse한 node의 마지막을 저장하여, 다음번 reverse를 하게 되면 이 둘을 이어준다. class Solution { public ListNode reverse(ListNode head) { int n = 0; ListNode cur = head; if (head == null) { return null; } while (cur != null) { n++; cur = cur.next; } if (n == 1) { return head; } cur = head; ListNode prev = null; ListNode next = null; while (cur != null) { next = cur..
[Java] LeetCode 23번 Merge k Sorted Lists k개의 정렬된 링크드 리스트를 1개의 정렬된 링크드 리스트로 합치는 문제이다. 머지소트와 상당히 흡사하다. 그래서 list의 길이가 2라면 두 리스트를 합쳐주고, 3이상이라면 반씩 쪼개어서 다시 merge 과정을 진행해준다. class Solution { public ListNode mergeTwo(ListNode first, ListNode second) { ListNode ret = new ListNode(); ListNode cur = ret; while (first != null && second != null) { if (first.val < second.val) { cur.next = new ListNode(first.val); first = first.next; } else { cur.nex..
[Java] LeetCode 22번 Generate Parentheses 재귀적으로 호출하여서 괄호를 만들었다. 중복으로 괄호가 추가되는 것을 방지하기 위해서 set으로 체크를 하였다. class Solution { public Map dp = new HashMap(); public List generateParenthesis(int n) { if (dp.get(n) != null) { return dp.get(n); } if (n == 1) { List list = new ArrayList(); list.add("()"); dp.put(1, list); return list; } List answer = new ArrayList(); List smallerOne = generateParenthesis(n - 1); Set checked = new HashSet(); for ..