본문 바로가기
반응형

Golang38

[Go] Heap 자료구조를 사용하는 우선순위 큐 (Priority Queue) 서론 Go 에는 Priority Queue가 없다. 심지어 Queue 조차 없다. 그 이유는 예상컨데 너무 쉽게 Queue라 불리우는 자료구조를 구현할 수 있기 때문이 아닐까 싶다. 아무리 쉽지만 이해하지 않고 사용한다면 쉽게 느껴지지 않을테다. 내가그랬다.. 우선순위큐를 사용해야한다면 다른 언어를 통해 알고리즘을 풀어버린 나약한 선택을 했다.. 간단히 공부를 하고보니 예전에 예제를 보며 왜 이 복잡한 일을 개발자에게 맡기는거야! 라고 생각했지만 그 정도로 복잡한 내용이 아니었다. 살펴보자. Priority Queue 란? FIFO(First In First Out)의 특징을 가지는 자료구조인 Queue. 이 Queue 자료구조에서 우선순위를 주어 힙을 통해 우선순위를 기준으로 O(nlogn)의 시간 복.. 2021. 10. 4.
[Go] 클로저(Closure)를 활용하여 생성기(generator) 제작 클로저란? 클로저는 더 가까이란 뜻의 Closer가 아니라 닫힘을 의미하는 Closure이다. 일반적으로 함수 외부에서 작성된 데이터를 함수에서 사용하기 위해서는 매개변수를 사용하여 받은 값을 수정한 후 이를 리턴하는 방식을 사용한다. 하지만 이 클로저라는 기법을 사용한다면 함수 외부에서 작성된 지역변수를 함수 내에서 마음대로 접근하는 것이 가능해 진다. 예시 간단한 코드를 통해 알아보는 것이 가장 확실한 방법이 아닐까 한다. func main() { val := 0 f := func() { val++ } f() fmt.Println((val)) } 결과 : 1 생성기란? 하나의 분리된 캡슐화된 객체를 생성하는 패턴이라 생각할 수 있다. 클로저를 이용한 생성기 코드 import "fmt" func gen.. 2021. 10. 2.
[Algorithm]Programmers_월간코드챌린지_86052_빛의 경로 사이클_Go 링크 링크 : 빛의 경로 사이클 풀이 방법 문제 설명 빛이 "S"가 써진 칸에 도달한 경우, 직진합니다. 빛이 "L"이 써진 칸에 도달한 경우, 좌회전을 합니다. 빛이 "R"이 써진 칸에 도달한 경우, 우회전을 합니다. 빛이 격자의 끝을 넘어갈 경우, 반대쪽 끝으로 다시 돌아옵니다. 예를 들어, 빛이 1행에서 행이 줄어드는 방향으로 이동할 경우, 같은 열의 반대쪽 끝 행으로 다시 돌아옵니다. 생각해야 할 것 주어진 칸을 생각하며 간단히 좌회전, 우회전을 할 방법을 생각해 낸다. 0 : 위, 1 : 오른쪽, 2 : 아랫쪽, 3 : 왼쪽 으로 지정하여 기존의 방향에서 우회전일 경우 +1, 좌회전일 경우 -1을 해 방향을 지정해 준다. 격자의 범위를 지나칠 때 반대쪽에서 다시 나타나는 방법을 생각해 낸다. p.. 2021. 10. 1.
[Go] 고루틴(Goroutine) 알고쓰기(2) - Block 처리방식, Channel 동시성과 병행성의 차이 그리고 고루틴의 간단한 사용법을 이전 포스팅에 남겼다. 이 포스팅은 조금 더 고루틴을 맛깔나게 쓰기위한 Channel에 대해 알아보려 한다. ( 고루틴의 간단한 사용법은 이전 포스팅 글에서 확인하시길 바란다. ) Channel이란? Channel은 Golang의 고루틴 간의 통신을 위한 수단. Channel은 Thread Safe한 Queue이다. Channel은 Golang에서 기본 자료형으로 주어지며 일급 객체의 역할을 한다. Channel의 표기법은 chan [자료형]이며 주고 받는 역할을 하는 양방향 channel, 주기만 또는 받기만 하는 단방향 channel을 지정할 수 있다. Channel은 레퍼런스 자료형이다. Channel은 Block 형태의 처리방식을 가진다. B.. 2021. 9. 17.
[Algorithm]Programmers_12952_N-Queen_Go 문제 링크 N-Queen : 링크 문제 풀이 Well Known 이군요.. 체스에서 퀸의 움직임을 알아둔다. 가로 세로 대각선 완전 만능 row, col, diagnol 방향 모두 가능하다면 하나씩 체크하면서 넘어간다. 끝까지 도착했다면 모든 조건에 만족했다는 뜻! answer += 1 package q12952 var board [][]bool var colCheck []bool func initBoard(n int) { board = make([][]bool, n) colCheck = make([]bool, n) for i := 0; i < len(board); i++ { board[i] = make([]bool, n) } } var answer int func goBackTracking(size, .. 2021. 9. 16.
[Algorithm]Programmers_43238_입국심사_Go 문제 링크 입국심사 : 링크 문제 풀이 입국심사를 진행하는 심사원들을 작업이 걸리는 시간을 기준으로 오름차순으로 정렬한다. 시간을 기준으로 이분탐색을 진행한다. 코드 package q43238 import ( "fmt" "sort" ) func binarySearch(n int, times []int) int64 { sort.Ints(times) left := 1 right := n * times[len(times)-1] answer := 0 for left < right { middle := ((left + right) / 2) tmp := 0 for _, val := range times { tmp += middle / val } if tmp < n { left = middle + 1 } else i.. 2021. 9. 15.
반응형