분류 전체보기
-
[Leetcode] 215. Kth Largest Element in an Array코딩테스트 2021. 4. 24. 16:53
문제) Given an integer array nums and an integer k, return the kth largest element in the array. Note that it is the kth largest element in the sorted order, not the kth distinct element. Example 1: Input: nums = [3,2,1,5,6,4], k = 2 Output: 5 Example 2: Input: nums = [3,2,3,1,2,4,5,5,6], k = 4 Output: 4 Constraints: 1
-
[Leetcode] 240. Search a 2D Matrix II코딩테스트 2021. 4. 20. 22:31
문제) Write an efficient algorithm that searches for a target value in an m x n integer matrix. The matrix has the following properties: Integers in each row are sorted in ascending from left to right. Integers in each column are sorted in ascending from top to bottom. Example 1: Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5 Output: true ..
-
셸 정렬(Shell Sort)카테고리 없음 2021. 1. 31. 20:09
1. 셸 정렬이란? 셸 정렬은 삽입 정렬을 개선한 방법으로, 배열의 원소들을 정렬할 때 처음부터 끝까지 순서대로 방문하면서 원소를 정렬하지 않고, Gap을 주어 부분 리스트를 만든 후 정렬하는 방식을 말한다. 이 말이 무엇인지 아래 예제를 통해 살펴보자. 위의 예제에서 보여주는 특징은, 1) 'k'라고 하는 변수를 통해서 Gap을 조정한다. => 참고로 최초의 k는 보통 '배열의 길이/2'로 설정하며, 개발자가 값을 '배열의 길이/3' 또는 위와 같이 홀수로 결정하는 방법 등이 있다. 2) 'k'만큼 떨어진 값들을 정렬한다. 3) k가 1이 될 때까지 1,2번 과정을 반복한다. 이렇게 3가지로 압축 할 수 있다. 2. 성능비교(삽입정렬 / 셸 정렬) Name Best Avg Worst Run-time(정..
-
Intro Sort (인트로 정렬)개발기초/자료구조 2021. 1. 26. 01:02
일반적으로 퀵정렬은 평균적으로 O(n log n)이라는 시간복잡도를 갖습니다. 하지만 최악의 경우에는 O(n²)이라는 시간복잡도를 갖게되지요. 개발자들은 퀵정렬의 평균적이라는 장점을 살리고 최악의 경우를 보완하는 알고리즘을 만들고자 했습니다. 즉, 최악의 경우에도 O(n log n)을 만족하고자 하는 것인데요, 결국, 개발자들은 퀵정렬이 최악의 경우에도 시간복잡도가 O(n log n)이 되는 방법을 찾았습니다. 아이디어는 간단합니다. 퀵정렬을 사용하되 다른 알고리즘들과 혼합하여 사용하면 됩니다. 다만 특이한 점은 1차 임계값과 2차 임계값이 존재하여 각 알고리즘 사용 구간을 구분해준다는 점입니다. 맨 처음 정렬에는 퀵소트를 사용합니다. 그리고 재귀적으로 퀵소트를 사용하면서 분할되는 횟수를 스스로 모니터링..
-
[Golang] Mysql 연결하기개발언어/Go 2020. 10. 25. 20:00
1.DB 연결 Import "Github.com/go-sql-driver/mysql" // mysql 전용 라이브러리 import ... // 디비 커넥션 오픈 // 참고) func Open(driverName, dataSourceName string) (*DB, error) // 아래는 예시 db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@/dbname?parseTime=true", os.Getenv("MYSQLUSERNAME"), os.Getenv("MYSQLPASSWORD"))) ... (sql 작업) defer db.Close() // db 커넥션을 다 사용하면 닫아준다. 2. 테이블 생성 및 조작 (DDL, DML) // DDL, DML은 db.Exec 명령..
-
[Golang] 마이크로서비스 공통패턴개발언어/Go 2020. 10. 14. 01:00
마이크로 서비스를 구성할 때에는 아래와 같은 패턴을 고려해서 설계하는 것이 좋다. 1. 이벤트처리 기존에 알려진 위치에 있을 수도 있고 없을 수도 있는 서비스에 직접 연결하는 대신, Kafka 같은 큐에 이벤트를 보내서 처리하는게 좋다. 특정 시점에 에러가 발생했을 경우, 그 특정 시점의 에러 메세지를 기반으로 메세지에 추가적인 정보를 보완해서 큐에 다시 추가할 수 있다. 메세지를 처리하지 못할 때마다 에러를 추가하는 것이 중요한데, 처리 시도 횟수를 기억하고 있다가 특정 횟수를 초과하면 이 메세지를 진단 정보를 사용하기 위한 두 번째 큐로 옮기게끔 설계하는게 좋다. 이 두번째 큐는 일반적으로 dead letter 큐라고 하며, 이 처리 불가 큐는 메세지가 처음 시작된 큐에 의해 지정된다. 2. Time..
-
Prometheus OperatorSW개발/Prometheus 2020. 10. 13. 01:00
Operator Framework Prometheus Operator를 이야기하기 전에 먼저 Operator Framework가 뭔지 알아보자. 보통 k8s에서 configmap을 수정하면, workload(deployment, statefulset 등)를 재기동해야하는 문제가 있다. 단순히 하나의 설정만 바꾸었음에도 운영중인 환경의 파드를 재배포해야하는 문제가 발생하는데, 상황에 따라서 굉장히 위험한 작업이 될 수 있다. CoreOS에서는 이러한 부분을 해소하기 위해 Operator Framework라는 개념을 고안하였고, 이를 통해 설정변경에 민감하지 않은 k8s 환경을 구성할 수 있게하였다. 한 마디로 말하면, 운영중인 application의 설정을 변경하더라도 application을 지속사용 가능..
-
[Golang] RPC API개발언어/Go 2020. 10. 12. 01:00
간단 설명 RPC는 Remote Protocol Call의 약자로 원격 장비에 있는 함수나 메서드를 실행하는 방법이다. RPC에는 여러가지 다른 유형의 RPC 기술이 있으며, 인터페이스 기술(SOAP, Thrift, Protocol Buffer)이 필요하다. 일반적으로 인터페이스는 DSL(Domain Specific Language, 도메인 특화 언어)을 사용해 정의되며, 생성 프로그램은 이를 이용해 애플리케이션 클라이언트와 서버를 만든다. REST API가 HTTP를 전송 계층으로 사용해야 하는 것과는 달리 RPC는 이러한 제약이 없으며, HTTP뿐만 아니라 TCP, UDP 소켓도 사용가능하다. RPC 메시지 프레임워크 RPC는 RPC 메시지 프레임워크를 사용하여 기능한다. 1. Gob Go는 Gob ..