시간복잡도는 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..
class Solution { public int solution(String s) { //MAX_VALUE는 Infinity처럼 사용된 것. int answer = Integer.MAX_VALUE; int len = s.length(); if(s.length()==1) return 1; //1부터 1씩 더해가며 패턴길이 만들기. for (int i=1; i 1) { reStr += "" + cnt; } reStr += pattern; //패턴을 돌고 남은 값. int div = s.length()%i; //맥스값/이어붙인 string길이+남은 값 중 작은 값. answer = Math.min(answer, reStr.length()+div); } return answer; } } 소스코드: https:..
import java.util.*; class Solution { //현재 위치와 우선순위를 중복과 구분하기 위해 객체 생성. //key가 같으면서도 value가 다른게 필요하기 때문. class Pair { int index; int value; public Pair(int index, int value) { this.index = index; this.value = value; } } public int solution(int[] priorities, int location) { Queue q = new LinkedList(); int answer = 0; //큐에 우선순위와 우선순위의 위치 형태로 저장. for (int i=0; i current) { //찾으면 찾음. 신호하고 종료. flag = ..
- Total
- Today
- Yesterday
- 아키텍처
- 루나빔
- 도커
- Dap
- neovim
- JavaScript
- vim
- RequestParam
- RequestPart
- IDE
- lunarvim
- 레디스
- RequestBody
- 배포
- ModelAttribute
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |