2020/07 9

leetcode 437(트리, prefix sum), 113(트리), 82(linked list), 83(linked list)

437 https://leetcode.com/problems/path-sum-iii/ 1. 노드가 많아봐야 1000개라고 문제에 써있었으니 다른 방법이 기억 안날땐 O(n^2)으로 풀어도 된다.(제출 안하는것보다는 나으니.) from collections import deque class Solution(object): def pathSum(self, root, sum): if not root: return 0 nodelist = deque([root]) # nodelist에는 모든 노드들을 저장해놓는다. q = deque([root]) while q: p = q.popleft() if p.left: nodelist.append(p.left) q.append(p.left) if p.right: nodel..

leetcode 116(트리), 117(트리, 레벨 오더), 119(트리), 203(linked list), 849(구현)

116 https://leetcode.com/problems/populating-next-right-pointers-in-each-node/ 왼쪽에 있는 노드들의 next를 전부 오른쪽을 보게끔 하는 문제이다. 현재노드의 왼쪽자식.next = 현재노드의 오른쪽 자식. 그다음 루프를 돌때부모쪽에서 현재 노드의 next를 만들어줬었으면 그 정보를 토대로 만들어준다. 그림을 보면서 짜면 더 편하다. class Solution(object): def connect(self, root): if not root: return None cur = root _next = root.left while _next: cur.left.next = cur.right if cur.next: cur.right.next = cur...

Vault.

Vault관련 참고 가장 좋았던 블로그 : https://lejewk.github.io/vault-get-started/ Vault란 토큰, 비밀번호, 인증서 ,암호화 키와 같은 비밀 정보나 민감한 데이터를 UI, CLI, HTTP API 를 활용할때 안전하게 저장하고 제어할수 있게 해주는 오픈 소스 입니다. https://learn.hashicorp.com/vault/getting-started/apis https://www.vaultproject.io/api-docs/index 뭔가 더 적고 싶은데 위의 링크나 공식 튜토리얼에 전부 다 설명되어있어서(사용사례까지) 억지로 더 적지 않고 끝냄.

data engineering 2020.07.16

kafka set credentials

https://developer.ibm.com/technologies/messaging/tutorials/kafka-authn-authz/ 를 보고 정리.. 잘 작동한다. broker side. 1. jass파일을 만든다. KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin" user_alice="alice" user_bob="bob" user_charlie="charlie"; }; 이처럼 만들면 사용자가 사용할수 있는 alice, bob, charlie가 추가된다. jass.conf라고 이름짓고 ~/kafka/config안에 저장해놓는다. username=..

data engineering 2020.07.13

leetcode 1081,316(구현), 1130(트리), 150(후위 표기법 계산), 419(구현, ship)

1081 https://leetcode.com/problems/smallest-subsequence-of-distinct-characters/ 문제를 이해하는데 시간이 좀 걸렸다. 문제를 쉽게 풀어쓰자면 중간에 중복된 단어를 지워서 결과값으로 단어가 1개씩만 나오도록 만드는데 결과값이 사전 순서상으로 가장 낮은 값이 나와야 한다. cdadabcc의 답이 abcd가 아니라 adbc가 나온 이유는 cdadabcc에서 a다음에 b가 먼저 오게 되면 b이후에는 cc밖에 없기때문에 d를 출력할수 없기 때문이다. 난 기본적으로 요 링크의 방법으로 풀었다. class Solution(object): def smallestSubsequence(self, text): order_dict = {} for i, t in e..

leetcode 300(lis, dp), 334(구현), 646(lis, dp)

300 https://leetcode.com/problems/longest-increasing-subsequence/ lis문제이다. 예전에 백준에서 많이 풀었었다. 오랫만이니 리마인드해보자. https://qkqhxla1.tistory.com/763 from bisect import bisect_left class Solution(object): def lengthOfLIS(self, nums): if not nums: return 0 dp_len = max(nums)+1 if max(nums) > 0 else len(nums)+1 def lis(line): dp = [0 for i in xrange(dp_len)] size = 0 for i in xrange(len(line)): h = bisect_..

jq, awk

쉘에서 입력값을 받아서 가공해서 쓸때 조금서 세세하게, 정교하게 가공하기 위해서 아래의 jq나 awk를 많이 쓴다. 프로그래밍으로 다 받아서 처리해도 되지만(awk도 프로그래밍이지만 어떤 작업을 처리하기 위해 소스파일을 따로 만들어서 처리하는 경우를 말함.) 그러면 너무 닭잡는데 소잡는 칼을 쓰는것 같고.. 하는 느낌이 들어서 쉘의 한줄 명령어를 쓸때 소금처럼 간단하게 많이 쓰는데 아래 블로그에 튜토리얼식으로 글 설명이 꽤 잘되어있다. 글을 저장해놓고 한번씩 참조할때 다시 한번 보면 좋을것같다. jqhttps://www.44bits.io/ko/post/cli_json_processor_jq_basic_syntax awkhttps://recipes4dev.tistory.com/171

leetcode 1114(구현, 쓰레드), 417(dfs parcific atlantic water flow), 179(구현), 19(linked list)

1114 https://leetcode.com/problems/print-in-order/ 쓰레드 환경에서의 lock관련된 실행 순서를 구현하는 문제이다. 반드시 first, second, third순으로 실행되게 하려면 lock으로 잠궜다 풀었다를 잘 해야 한다. lock.acquire()을 했을 경우 lock.release()를 호출해서 그 락을 풀어주기 전까지는 재차 lock.acquire()을 호출할수 없는점을 이용한다. first에는 아무런 제한 없이 출력하고 풀어준다. second에는 first에서의 락을 acquire()함으로써 first에서 release()가 호출될때까지 기다려야함으로써 first -> second호출순서가 유지된다. third도 마찬가지이다. from threading ..