본문 바로가기

전체 글451

golang 마샬링 / 언마샬링 고랭 + gRPC에서 json 데이터를 다룰때 마샬링과 언마샬링이라는 개념이 있다. 보통 encoding/json 패키지를 활용해서 마샬링을 하게 된다. 마샬링은 데이터를 바이트로 변경한다. var name string name = "hello" byte := json.Marshal(name) 언마샬링은 바이트를 고랭에서 쓸 수 있는 변수 형태로 변경한다. name := "hello" var us string json.Unmarshal([]byte(name), &us) 여기서 조금 특이한 점은 Unmarshal의 파라미터로 &us 포인터 형태로 전달한다 이렇게 하면 us 변수에 해당 값이 할당된다. 조금 C 언어 같은 느낌이다. 2020. 9. 17.
callback함수 promisify 하기 nodejs 에서 몇가지 모듈들은 promise 형태로 제공되지 않는 경우가 있다. 아래 코드처럼 콜백을 인자로 전달해서 실행해야 한다. const makePromisify = (callback) => { return callback(null, 'data'); } makePromisify((err, data) => { console.log(data); }) 이렇게 콜백을 전달하는 함수들을 promisify 해서 바꾸면 편리하다. 어떻게 바꾸는지 차근차근 살펴본다. 먼저 promisify 를 넣게 되면 아래와 같이 된다. function을 인자로 전달해야 한다. 그럼 전달해보자. 전달했다. 이렇게 하면 func 의 값이 Promise 를 리턴하는 함수가 된다. 그럼 저기에 호출을 하면 then 을 사용할 .. 2020. 8. 21.
blocking sync / blocking async / non-blocking sync / non-blocking async blocking / non-blocking async / sync 방식의 차이 1. blocking sync 작업 수행 -> 대기 -> 결과 반환 -> 다시 작업 진행 2. blocking async - node js 와 mysql 을 사용하는 경우에 이럴 수 있다. nodejs 는 async인데 mysql은 blocking 이다. 직접적으로 이렇게 사용하는 모델이 있지는 않다. blocking이기 때문에 함수 호출 후 대기한다. 콜백 함수를 리턴받고 호출한다. 3. non-blocking sync 작업 수행 -> 함수 호출 -> 바로 콜백 반환 -> 완료 확인 -> 완료 안됨 -> 다시 호출 -> -> 다른 작업 수행 -> 완료확인 -> 완료 안됨 -> 다시 호출 다른 작업을 수행할 수는 있는데 완료 .. 2020. 8. 10.
프로그래머스 - 기능 개발 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도는 100 이하의 자.. 2020. 8. 10.
leet code 20 -Valid Parentheses Valid Parentheses 괄호를 검사하는 문제이다. function isValid(s) { const splitStr = s.split(''); if (splitStr[0] === ')' || splitStr[0] === '}' || splitStr[0] === ']') { return false; } const stack = []; for (const s of splitStr) { if (s === '(') stack.push(')'); else if (s === '[') stack.push(']'); else if (s === '{') stack.push('}'); else if (stack.pop() !== s) return false; } return stack.length === 0 ? .. 2020. 8. 5.
leetcode- 155 Min stack leetcode Min stack을 풀었다. stack 을 구현하는 문제였다. 답은 이렇다. class MinStack { arr: any[]; constructor() { this.arr = []; } push(x: number): void { this.arr.push(x); } pop(): void { this.arr.pop(); } top(): number { return this.arr[this.arr.length - 1]; } getMin(): number { return this.arr.reduce((prev, cur) => prev > cur ? cur : prev) } } 특이사항은 최소 값을 구하는 getMin 함수를 구현하는 것이었다. reduce를 써서 최소 값을 구한다. 2020. 8. 3.
Leetcode - 121. Best Time to Buy and Sell Stock 리트코드 Best time to buy and sell stock 문제를 풀었다. Example 1: Input: [7,1,5,3,6,4] Output: 5 Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5. Not 7-1 = 6, as selling price needs to be larger than buying price. Example 2: Input: [7,6,4,3,1] Output: 0 Explanation: In this case, no transaction is done, i.e. max profit = 0. 배열을 입력으로 받고 언제 사서 언제 팔면 이익이 가장 클지 계산하는 문제다... 2020. 8. 3.
Leetcode - 121. Best Time to Buy and Sell Stock 리트코드 Best time to buy and sell stock 문제를 풀었다. Example 1: Input: [7,1,5,3,6,4] Output: 5 Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5. Not 7-1 = 6, as selling price needs to be larger than buying price. Example 2: Input: [7,6,4,3,1] Output: 0 Explanation: In this case, no transaction is done, i.e. max profit = 0. 배열을 입력으로 받고 언제 사서 언제 팔면 이익이 가장 클지 계산하는 문제다... 2020. 7. 31.
병합 정렬 javascript / merge sort 병합 정렬은 배열을 일정 크기로 분할한 다음 정렬하고 합치는 방식이다. [8,7,6,5,4,3,2,1] 이렇게 숫자가 있다면 [8,7,6,5] [4,3,2,1] [8,7] [6,5] [4,3] [2,1] 이렇게 나눈다. 그리고 나눠진 배열을 정렬한다. [7,8] [5,6] [3,4] [1,2] 앞에서부터 하나씩 비교하고 빼내서 결과를 만든다. [7,8] [5,6] 5가 더 작다. 5를 빼낸다. [5] [7,8] [6] 6이 더 작다. 6을 빼낸다. [5,6] [7,8] [] 배열에 7,8을 넣는다. [5,6,7,8] 이렇게 분할 된 두 배열을 합친다. 앞쪽의 5,6,7,8이 정렬되었다. 뒤쪽의 4,3,2,1도 마찬가지로 해본다. [3,4] [1,2] 1이 더 작다. 1을 빼낸다. [1] [3,4] [2].. 2020. 7. 26.