본문 바로가기

분류 전체보기

(44)
#1
[Effective Go] Control Structures Golang에서의 제어구문(Control Structures)은 C와 굉장히 밀접하면서도, 다르다. do, while 반복문은 사용하지 않고, for 만을 사용한다. switch는 좀 더 유연히 사용된다. switch를 포함해 select와 같은 multiway communications mulitplexer를 제공하기도 한다. If Golang에서 if 는 아래와 같이 사용된다. if x > 0 { return y } if 와 switch 에서 지역 변수에 대한 초기화 구문을 허용한다. if err := file.Chmod(0644); err != nil { log.Print(err) return err } Go Libraries에서, if 구문이 다음의 명령문(코드)로 수행되지 않게 사용하는 스타일을..
[Effective Go] Names Naming은 다른 언어와 같이 Golang에서도 중요한 의미를 가진다. 패키지 외부로 공개하기 위해서는 First Character는 Upper case로 되어야 한다.(JAVA의 Public과 비슷한 개념) Package names 패키지를 import 하려고할 때, 패키지명은 해당 컨텐츠의 접근자가 된다. 예를 들어 아래의 구문은 "bytes.Buffer"를 가져올 때 사용될 수 있다. import "bytes" 패키지명은 source directory명을 base name로 가진다. 예를 들어 원하는 패키지가 src/encoding/base64 라면 encoding/base64로 import할 수 있다. import "encoding/base64" 패키지를 import 할 때, 패키지는 해당 컨텐..
Linux 로그 관리 logrotate 리눅스에서 서버를 운영하다보면, 서버에서 장애가 발생하거나 상태를 확인할 때 가장 먼저 보는것이 로그입니다. 그래서 대부분의 로그는 남기도록 설정하고, 백업을 통해 특정기간동안 보관하기 마련입니다. 하지만 이 로그들은 시간이 지나면서 하나의 파일로 관리하기에 감당할 수 없을만큼 엄청난 크기로 커지게 됩니다. linux system의 다양한 기능들 중 로그를 관리해주는 logrotate라는 아주 유용한 기능이 있습니다. logrotate는 기본적으로 crontab에서 시작합니다. crontab이 logrotate를 실행하고, logrotate는 logrotate.conf를 참조하여 기본적으로 /etc/logrotate.d 디렉토리에 있는 설정에 맞게 로그 롤링/삭제/백업을 진행합니다. logrotate와 ..
Apache Kafka를 이용한 단일 노드 / 메시지 전송 Kafka를 수행시키기 위해, Kafka 및 Zookeeper를 다운로드합니다. (기본적으로 자바가 설치되어 있어야 합니다.)Kafka 다운로드, Zookeeper 다운로드 1. Zookeeper 및, Kafka 설정 단일 노드로 설정하기로 합니다. 우선 Zookeeper를 설정합시다. 123$ echo ‘1’ > /zookeeper/myid$ cd zookeeper/conf$ cp zoo_sample.cfg zoo.cfgcs [zookeeper/conf/zoo.cfg]12345tickTime=2000initLimit=10syncLimit=5dataDir=/home/shin/zookeeperNode1clientPort=2184cs 저는 Zookeeper Node를 위한 디렉토리를 하나 생성한 뒤, 위와 ..
15684 사다리 조작 Samsung Expert의 문제이다. 처음에는 조건에 맞추기 위해서는... 수직선에 연결된 수평선들이 모두 짝수개 여야 한다... 라고 가정하고 시작했더니 얄짤없이 틀려버렸다. 이래저래 다시 머리를 굴려보며 문제의 조건과 제한 시간들을 계산해보다 결국 브루트 포스로 해결했다. 단순히 모든 수평선에 대한 조합을 이용하여 새로 수평선들을 구성해 준 뒤, 해당 사다리에 대해 검사하면 된다. 수평선에 대해서 2차원 배열로 구성하는 것이 조금 더 빠를 것 같았지만, 그냥 해쉬 테이블을 이용해서 구성시켰다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626..
2365 숫자판 만들기 그 동안 Max flow에 해당하는 문제는 Edmonds-Karp 알고리즘을 통해서만 해결했었는데, 이번 문제는 해당 알고리즘으로는 시간초과가 발생한다. 그래서 조금 더 상위의 알고리즘을 공부할 기회가 되었다. Dinic 알고리즘을 이용하면 해당 문제를 시간 내에 해결이 가능하다. BFS로는 Source로 부터 Sink까지 이동할 수 있는 경로에 한해 Level을 구해주고, 해당 level을 이용한 Dfs로 max flow를 구할 수 있다. 사실 문제의 관건은 그래프의 구성이기도 하였다. 행의 합과 열의 합이 문제의 입력으로 주어지기 때문에 그래프의 구성에 있어서도 고민을 조금 했다. 1. Source로 부터 행의 합들에 대하여 생성한 노드들(Entrance)과 연결한다. 2. 이후 행의 노드는 해당 행..
5373 큐빙 제법 머리를 굴려서 해결한 문제이다. 가상의 큐브가 있을때, 상단의 왼쪽 뒷편을 (0,0,0)으로 기준을 잡자. 이후 x, y, z 축을 이용하여 각 큐브를 3차원 배열에 대입한다. 문제의 조건에서 앞면(Front), 뒷면(Back), 왼쪽면(Left), 오른쪽면(Right), 윗면(Up), 아랫면(Down)에 해당하는 면에 대한 접선과 그 중심 Cell의 좌표를 아래와 같이 미리 구해둔다. 12CENTERS = {'U': (1,1,0), 'D': (1,1,2), 'F': (1,2,1), 'B': (1,0,1), 'L': (0,1,1), 'R':(2,1,1)}DIRECTIONS = {'U': (0,0,-1), 'D': (0,0,1), 'F': (0,1,0), 'B': (0,-1,0), 'L': (-1,0..