문제

비어있지않은 두개의 링크드리스트가 제공되며 이 각각의 링크드리스트에 숫자들은 반대로 저장되어있다.

그리고 각 노드들은 한개의 숫자만 가지고 있다. 각각의 링크드리스트의 노드들을 더한후 

링크드리스트로 리턴해라

 

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

Explanation: 342 + 465 = 807.

 

 

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
32
33
34
35
36
37
38
39
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
 
        int resultCnt = 0;
        ListNode dummy,resultNode = new ListNode(0);
 
        
        dummy = resultNode;
        
        while (l1 != null || l2 != null || resultCnt != 0) {
            
            if (l1 != null) {
                resultCnt += l1.val;
                l1 = l1.next;
            }
            
            if (l2 != null) {
                resultCnt += l2.val;
                l2 = l2.next;
            }
            
            dummy.next = new ListNode(resultCnt % 10);
            dummy = dummy.next;
            resultCnt /= 10;
            
        }
        
        return resultNode.next;
       
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

시간복잡도 O(log n)

 

1. while 셋중에 어느조건이라도 true면 계속 돌아감 , 3개다 false면 멈춤

2. listnode dummy와 resultNode를 생성후 dummy에 resultNode의 인스턴스를 넣어준다.

3. 30번째줄 dummy.next는 resultNode의 next이며 ListNode 인스턴스를 만들어서 넣어줌

4. 31번째줄 dummy에 새롭게 생성된 ListNode 인스턴스를 넣어줌

5. 이런식으로 계속 while문을 돌면서 ListNode안에 ListNode를 생성 하면

   따로 resultNode를 건드리지않아도 dummy가 하위 ListNode를 계속 생성을 함.

6. 노드의 숫자는 한자리수만 들어갈수 있기때문에 10으로 나눠서 남은숫자를 next에 집어넣음

7. 10이상일경우 resultCnt에 담김

8. 그럼 null이 아닐경우 resultCnt와 매개변수로 입력받은 l1,l2를 더해줌 그리고 매개변수 l1과 l2는 하위 노드를

   넣어서 와일이 돌면서 계속 하위의 노드값을 찾을수있게해줌

9. while 조건이 끝나면 resultNode를 리턴함.

 

문제

숫자가 담긴 바이너리서치트리와 타겟번호가 주어졌을때 더했을때 합이 타겟과 일치하는지 boolean으로 리턴시켜라

 

https://leetcode.com/problems/two-sum-iv-input-is-a-bst/

 

Two Sum IV - Input is a BST - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

예제 bst는 링크참조

 

 

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
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean findTarget(TreeNode root, int k) {
       HashSet<Integer> hashs = new HashSet<Integer>();
       return dfs(root,hashs,k);
    }
    
    public boolean dfs (TreeNode root,HashSet<Integer> hash, int k) {
        
        if (root == null) {
            return false;
        }
        
        if (hash.contains (k - root.val)) {
            return true;
        }
        
        hash.add(root.val);
        
        return dfs(root.left,hash,k) || dfs(root.right,hash,k);        
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

시간복잡도 O(log n)

 

1.노드를 좌측부터 검색해나가면서 hashset에 등록시킨다.

2.재귀로 계속 검색

3.왼쪽 노드가 더이상없을경우 28번줄 return left에서 return이 false가 되며

  오른쪽노드를 검색함 -> 28번줄 right로 이동함.

4.오른쪽도 없을시 false를 리턴하며 이전재귀로 이동하여 left는 false가 되고 다시 오른쪽 노드를 검색함

5.있으면 또 재귀돌면서 왼쪽오른쪽 다 검색한다.

6.이렇게 검색하면서 중간에 hashset에 타겟번호에 현재노드값을 뺀 값이 있는지 확인

7. 있으면 true return이 다 true가 되면서 종료.

8. node a + node b = target t 이므로 target t - node b = node a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제

asc로 정렬된 인티저 배열이 제공되고 더 했을때의 합이 타겟과 같은 두개의 숫자가 몇번째 배열인지 리턴하라

 

Input: numbers = [2,7,11,15], target = 9

Output: [1,2] Explanation: The sum of 2 and 7 is 9.

Therefore index1 = 1, index2 = 2.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
 
            if (i != nums.length) {
                for (int j = i+1; j < nums.length; j++) {
                    int res = nums[i] + nums[j];
                    if (res == target) {
                        return new int[] { i+1, j+1 };
                    }
                }
            }
 
        }
        return nums;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

시간복잡도 O(n^2)

문제 인티저의 배열이 주어졌을때 더했을때의 합이 target의 숫자와 일치하는 두개의 숫자의 인덱스 번호를 리턴시켜라

 

Given nums = [2, 7, 11, 15], target = 9,

 

Because nums[0] + nums[1] = 2 + 7 = 9,

return [0, 1].

 

내가 푼 답

 

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if (nums[j] == target - nums[i]) {
                    return new int[] { i, j };
                }
            }
 
        }
        return nums;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

시간복잡도 O(n^2)

jpa 인강을 보던중 똑같이 따라했건만 h2 db의 table이 초기화가 되지 않는 현상을 발견

버전을 보니 내 버전은 1.4.200이고 강사님껀 더 낮은버전이였다.

 

그래서 검색을 해봤다.

 

https://stackoverflow.com/questions/59364212/integrationtest-isolation-fails-in-springboot-2-2-2-release-error-dopping-table

 

IntegrationTest isolation fails in springboot 2.2.2.RELEASE (Error dopping tables after each SpringBootTest)

Our app is working in 2.0.4 release. After upgrade to 2.2.2.RELEASE we see integration tests failing. I suspect that there is some misconfiguration, and each integration test simply does not clean ...

stackoverflow.com

 

보니까 이미 깃헙에 패치가 다 되어있었다

근데 1.4.200버전엔 적용이 안되있어서 스택오버플로우에 나오는 깃헙주소로 들어가

따로 하이버네이트의 dialect 를 상속받은 커스텀 dialect 클래스를 만들어 프로퍼티에 추가시켜주니

잘작동하는걸 확인했다.

 

참고로 위의 스택오버플로우 주소에 있는 커스텀 dialect를 그대로 가져다쓰면 안되고 (전 안됬음)

깃헙에 수정된 소스를 보고 맞춰서 수정해줘야됨

db 파일생성방법

1. url로 접속 한 후 jdbc:h2:~/xxxx 로 세션키 유지한상태로 접속한다.

2.xxxx.mv.db파일 생성을 확인한다

3.이후는 jdbc:h2:tcp://localhost/~/xxxx로 접속한다.

'개발 > db' 카테고리의 다른 글

mysql 데이터타입 - 실수  (0) 2020.04.19

List 타입의 list변수에 ArrayList 인스턴스를 넣는 이유

 

1. 다형성

List는 최상위 인터페이스이기때문에 하위의 ArrayList를 생성해서 넣어도

다른 Vector등 다른 자료형으로 교체가 가능하다.

 

이런 자유로운 교체는 상당한 이점을 가져온다.

어떠한 문제로 다른 자료형으로 교체되어야할 상황이 왔을때 쉽게 교체가 가능하며

 

다른 라이브러리를 사용할 일이 있을때 손쉽게 호환이 가능하다.

1.디펜던시에 롬복을 추가한다.

 

2.레포지토리에 등록된 롬복.jar을 찾는다

  내 경로는 레포지토리\org\projectlombok 였음

 

3.java -jar 롬복.jar로 실행시킨다.

 

4.따로 창이뜨면 롬복 플러그인을 추가시킬 ide를 찾아서 적용시켜준후 인스톨 또는 업데이트한다.

 

5.이클립스를 껏다키면 적용된다. 

 

6.그리고 프로젝트 프로퍼티즈의 어노테이션 프로세싱 란을 찾아 enable annotation processing 에 체크해준다

+ Recent posts