본문 바로가기
반응형

Golang38

[Algorithm] Programmers_42579_베스트앨범 - Go 문제 링크 Programmers_42579_베스트앨범 생각 1. 장르의 우선순위를 먼저 생각 2. 장르별로 노래의 우선순위를 생각 기본적으로 sort만을 사용해서도 풀이가 가능하지만 우선순위 큐를 체득하고 싶어서 우선순위 큐도 사용 코드 import ( "container/heap" "fmt" "sort" ) type genre struct { name string playAmount int } type song struct { index int playCount int } type pq []song func (p pq) Len() int { return len(p) } func (p pq) Less(i, j int) bool { if p[i].playCount == p[j].playCount { ret.. 2022. 6. 13.
[Server] Go Web Server HTTPS 적용하기 HTTPS란? HTTP 프로토콜을 사용하여 통신하는 웹 애플리케이션에 TLS 프로토콜을 적용시켜 암호화된 데이터를 사용하여 통신하는 프로토콜. TLS란? 컴퓨터 네트워크 통신에 데이터를 암호화하는 데 활용할 수 있는 프로토콜. 대칭 암호화 방식과 공개키 암호화 방식을 사용한다. 디지털 인증서란? 믿을 수 있는 제3자 기관에 의해 발행된 디지털 문서이다.(스스로가 OpenSSL과 같은 오픈소스를 통해 자가 인증이 가능하기도 하다) 공개키, 이 키가 속한 서버 이름, 정보를 검증하는 믿을 수 있는 제3자 기관의 이름, 발행자가 기록돼 있다. 이 제3자 기관을 인증기관(CA)이라 한다. 만료일자가 존재한다. 웹 클라이언트는 일반적으로 알려진 인증기관의 리스트를 갖고 있다. 대칭 암호화 방식 대칭키 알고리즘이라.. 2022. 6. 7.
[Go] 고루틴(GoRoutine) 심화(5) - 누수 관리 메모리 누수 비록 고루틴이 다른 쓰레드에 비해 가볍긴 하지만 메모리를 사용하는 것은 당연할 것이다. 그렇기에 사용하진 않지만 살아있는 고루틴은 프로세스의 메모리를 쓸데없이 낭비하게 될 것이다. 이런 현상을 메모리 누수라 한다. 메모리 누수를 관리하는 방법을 살펴보자. 누수 관리 누수가 일어나는 예시 package main import ( "fmt" ) func main() { doWork := func(strings 2022. 5. 24.
[Go] 고루틴(GoRoutine) 심화(4) - channel Channel Channel 이란? 고루틴을 사용하는 데 있어서 데이터를 전달하는 가장 효과적인 방법이다. 데이터를 전달하는데 통로 역할을 한다. 채널을 사용하는 데 있어 서로 간에 많은 정보를 알 필요는 없으며 채널에 대한 주소 값만 알면 채널을 통해 데이터를 송신하고 수신할 수 있다. Channel의 종류 양방향 채널 (chan interface{}) 데이터를 송신하고 수신하는 역할 모두 가능하다. 송신용 채널 (chan 2022. 5. 15.
[Go] 고루틴(GoRoutine) 심화(3) - sync.Pool Pool Go는 GC(Garbage Collector)가 존재하는 언어이다. 그렇기에 사용하지 않는 객체는 GC가 이를 알아차려 정리하고자 할 것이다. 그러나 객체를 생성하는데 굉장히 오랜시간이 걸리고 당장엔 사용하지 않지만 이를 재사용할 가능성이 높다면 GC가 삭제하는 것은 큰 효율성 저하를 불러올 것이다. 또한 많은 객체를 생성해야 할 필요가 있는 객체역시 만들어 놓은것을 재사용한다면 메모리적으로도 크게 이득을 볼 수 있을 것이다. 이를 효율적으로 관리해 주는 것이 Pool이라 불리는 객체 저장소이다. 그리고 Go 언어는 이 기능을 Sync 패키지에 내장해 두었고 이것이 sync.Pool 이다. Sync.Pool의 기본 기능 GET 풀에 저장된 인스턴스를 불러오는 함수. NEW 풀에 저장된 인스턴스가.. 2022. 5. 13.
[Algorithm]BOJ_18809_앱 - Go 문제 링크 BOJ_18809_앱 생각 생각해야 할 값이 2개다. 돌려받는 메모리와 리턴에 대한 오버헤드. dp를 사용하는 가방 알고리즘을 떠올렸다. 코드 package main import ( "bufio" "fmt" "os" ) var memories, returnVal []int var table [][]int var returnValMax int func main() { r := bufio.NewReader(os.Stdin) var N, M int fmt.Fscan(r, &N, &M) memories = make([]int, N+1) returnVal = make([]int, N+1) for i := 1; i 2022. 5. 9.
반응형