200402 보라매 공원에 갔다. 유치원과 어린이집 어디도 가지 못하는 두 딸이 집에만 갇혀있다. 장모님이 좀처럼 놀이터도 데려가지 않기 때문이다. 그래서 큰 딸의 소망을 쫓아 거기로 향했다. 사람이 엄청나게 많았다. 평일이라고 믿어지지 않을 정도. 주차하기도 애먹었다. 큰 딸은 이제 컸는지 제멋대로 멀리 가버린다. 덕분에 작은 딸을 안고 짐을 주렁주렁 든 채 큰 딸을 찾아 헤매야했다. 운이 좋아서 다행히 비행기가 전시된 곳 근처에서 맞닥뜨렸다. 어쩔 수 없이 꾸짖었다. 점심은 편의점에서 산 빵과 과자로 때웠다. 남은 건 비둘기에게 주었는데, 두 딸은 그 재미에 쏙 빠졌다. 비둘기를 보고 겁내던 작은 딸도 나중에는 스스럼없이 비둘기 떼로 향한다. 그리고 놀이터에서 두 시간 가량 놀았다. 작은 딸은 피곤한지 꾸벅꾸벅 .. 2020. 4. 3. 200401 운동을 할 기회를 못 찾고 있다. 회사에서 운동은 물 건넌 것 같아 신발도 집으로 가져왔다. 집 앞에 평탄한 곳이 있어서 거기서 뛰어보려 한다. 그런데 감기에 걸릴까봐 새벽에 못 나가겠다. 그럼 언제 하지? 부인 말대로 밤 중에 하는 수 밖에 없는 듯하다. 어쩔 수 없지... 지금 상황에는 코딩 백 줄보다 건강이 장기적으로 훨씬 유리하다. 오늘 퇴근해서 해봐야겠다. 어제는 산책하며 마지막으로 전환 배치 대기 중인 분과조금 긴 산책을 했다. 그 분은 게임에는 뜻이 없고 코딩 테스트를 준비하고 있다. 그런데 그 분도 곧 나갈 것 같다. 이미 2차 테스트까지 통과했다고 한다. 그 분은 말은 안 하시지만 나름 열심히 하고 계셨다. 반면 나는 여기서 뭐하고 있을까... 주변에 의미없는 포부만 떠들다가 어영부영 다.. 2020. 4. 1. 현명한 투자자 워런 버핏 할아버지가 이 책을 워낙 추천했기 때문에 언제고 읽어봐야지 했는데 이제야 읽었다. 그런데 책은 생각보다 재미없었다. 글솜씨는 버핏 할아버지 쪽이 훨씬 낫다. 게다가 책은 완전 미국 지향적이다. 미국에서만 가능한 저축 채권 투자 같은 것이 그 예이다. 게다가 논평 같은 것이 책의 몰입을 방해한다. 그러나 이 책에 중요한 시사점이 있다는 건 틀림없다. 투자에 있어서 미래를 예측할 수 없다는 점을 인정해야 한다는 것. 그러기에 심리적으로 내몰리지 않도록 포트폴리오를 구축해야 한다는 점이다. 어떤 상황이 와도 버틸 수 있어야 한다. 나는 그렇게 포트폴리오를 구성했는가? 자문하면 많은 부분을 위험 자산에 투입했기 때문에 손실이 적지 않다. 그러나 이상하게도 몰리는 느낌은 없다. 허세가 있는 성격이어서 .. 2020. 3. 30. 200330 꿈에서 굴욕감을 느꼈다. 살짝 잊고 있던 그 느낌... 나는 어느 회사에 있었다. 거기에 내가 알고 있는 사람이 사장으로 연설을 하고 있었다. 회사에 대해 비전에 대해. 그런데 나만 등을 돌리고 앉아 있었다. 왜냐하면 난 프로젝트에서 배제된 인물이었다. 사람은 망각의 동물이라고 그런 감정을 어느새 살짝 잊었다. 이제보니 정신적으로나 육체적으로나 쓸데없이 낭비하지 않도록 해야한다. 내게 주어진 시간은 아마 1년도 되지 않을 것이다. 그 전에 이직 준비를 마쳐야 한다. 좀 더 집중해보자. 쓸데없는 물건도 처리하자. 2020. 3. 30. 꿈꾸는 책들의 도시 간만에 만화책이 보고 싶어 빌렸다. 미리보기를 보니 매우 아름다운 그림이 인상적이었다. 책을 다 보니 정말 공들인 그림은 그야말로 역작이라 할 만 했다. 문제는 동화책 마냥 재미가 없다는 것. 아름다운 그림을 보여주기 위해 이야기는 마치 놀이 기구 마냥 개연성 없이 돌발적으로 흘러간다. 맥거핀으로 시작해서 여러 떡밥을 회수하지만 주인공 보정으로 모든 전개가 흘러간다. 이야기가 끝난 후 작가들이 그림을 그리기 위해 일일이 모형을 만들었다는 사실이 가장 놀라울 정도로 이야기는 하품날 정도이다. 책 안에서 책이 권력의 중심이고 책이 모든 사건을 전개하는데 막상 그 책은 재미없다는 모순이 재밌었다. 참 마지막 사진에 있는 그림자제왕은 종이 갑옷을 입고 있다는 설정인데 정말 종이로 모형을 만들었다고 한다. 뾰족뾰.. 2020. 3. 19. 투자를 어떻게 할 것인가 도서관이 코로나 사태로 죄다 문을 닫았다. 그래서 책 갈증이 있었다. 다행히 근처 도서관에서 택배 대출을 해준다. 고마운 일이다. 휴일에 읽어보니 이 책은 큰 문제가 있다. 타인의 여러 투자 성공담을 논하는데 인터뷰가 없다. 즉 저자의 상상으로 이루어져있다. 지금보면 무조건 해야하는 투자인데 그때는 아무도 안했는데 이러저러한 이유로 했다. 그런데 그 이유를 저자가 수치를 들어가며 설명해주는데 아무런 근거가 없다. 성공한 사람이 왜 그런 판단을 내렸는지는 도무지 알 수 없다. 주식 거장들의 단문도 여럿 인용하지만 사실 감흥은 없다. 명언집 보려고 한 건 아니니까. 이걸 보고 주식에서 성공하는 요인은 정말 없다고 생각한다. 좋은 기업을 골랐다고 생각하면 기도하는 것만 남았다. 필승 투자법... 그런 건 없고.. 2020. 3. 16. 200314 프로그래머스에서 적당한 챌린지가 나와 도전해보았다. 이번에는 웹프론트엔드이다. https://programmers.co.kr/competitions/131/2020-web-fe-first 순수 자바스크립트로 한다고 해서 Learning JavaScript를 조금 읽었다. 물론 다 보지는 못했다. 어쨌든 이전에 웹 개발 경험이 있던 분이 언급했던 여러 용어가 그제서야 이해가 되었다. package.json, ES6, Babel 등등. 그리고 어제는 시험 날짜였다. 배우자의 도움으로 토요일 4시간을 할당받았다. readme.md를 읽은 첫 느낌은 당혹이었다. 이걸 할 수 있을까... 약간의 장애 후에 코드를 볼 수 있었다. 이번에는 가상 머신처럼 웹에서 Visual Studio Code를 실행하고 터미널을 .. 2020. 3. 15. 회사를 추억하며 #1 이전 회사를 9년 가까이 다녔기에 여러 사람을 만났다. 그래서인지 많은 일이 있었다. 무엇보다 사람이 생각난다. 나는 늦게 합류했지만, 앞서 회사를 창업할 때 함께 한 이들. 대단한 사람들이었다. 이들에 대해 익명으로 써보고자 한다. 그런 거장들과 함께 일한 것으로도 사실 영광이다. 게다가 나의 장년 대부분을 장식한 추억이니까 ... 그 사람은 고기를 무척 좋아했다. 덩치도 매우 좋았다. 회사에는 항상 운동복 차림에 크로스백을 맸고 60인치에 달하는 4K 텔레비전을 모니터로 썼다. 그럼에도 아이러니하게도 글꼴 크기는 100 포인트가 넘었다. 조망이 전혀 안되는데도 코딩 솜씨는 그야말로 최고였다. 템플릿 라이브러리를 처음부터 혼자 짤 수 있었다. 믿을 수 없는 수준이었다. 컴파일러 레벨까지 완전히 알고 있.. 2020. 3. 3. 200224 최근에 그야말로 난리가 났다. 감염자가 생기면 회사가 휴업하게 되니 무조건 마스크를 쓰라고 공지가 왔다. 그런데 신종 플루나 메르스가 유행할 때는 어떻게 했었는지 기억이 안 난다. 분명 그 때도 회사를 다니고 일했었는데... 과거는 아름다워서 그런가. 동료에게도 물었는데 그도 잘 생각이 안 난다고 했다. 하긴 블랙 먼데이도 누군가에게는 끔찍한 과거지만, 또 어떤 이에게는 인생 전환의 기회가 되었다. 불운이 내게 닥치지 않는다면 이것도 그저 잊혀지리라. 문제는 마치 현재가 영원한 것처럼 보이는 것이지만... 그러나 공부를 하며 라디오를 들으니 세상 시름도 잊고 좋다. 나만 다른 세상에 사는 것처럼 말이다. 오늘은 유니티 튜토리얼을 좀더 했다. 간단히 속성을 다루거나 따라하는 건 지루했다. 코드로 진행하는 .. 2020. 2. 24. django 과제 전환 배치 기간 동안 이것저것 공부를 해보았다. 한가지만 팔 것 그랬나 생각도 들지만... 암튼 그 중에 웹 백엔드 프로그래밍을 시도해봤다. 장고는 파이썬 기반이기에 무척 익숙하다. 물론 백엔드는 낯설지만. 그런데 너무 늦게 이걸 보았고, 지원한 다른 곳에서도 nodejs 기반의 코드 과제를 주었다. 게다가 아이는 입원... 다행히 부인님이 도와줘서 밤 늦게 집에 온 뒤 새벽까지 짰다. 다음 날 오전 중에 수정해서 제출했다. 역시 이런 쪽의 학습 없이 도전해서 그런지 탈락했다. 면접 제의는 없었으니까. 점수가 무척 낮은데 상위라서 조금 놀랐다. 아마 지원하고 완성하지 않은 이가 많았으리라 짐작한다. 조금 더 열심히 해봤으면 어땠을까. 뭐 이미 지난 일이고... 일단 너무 늦게 과제를 보았다. 무엇보다 내.. 2020. 2. 22. 200219 오늘은 엔씨소프트를 관두는 오랜 지인을 만나 식사를 했다. 그는 이야소프트 시절부터 알던 친구같은 동생이다. 그는 QA로 일하고 있었다. 성실하고 언변도 뛰어났다. 마침 회사에서 기획자 수업 과정을 외부에서 받을 수 있는 기회를 주었다. 그는 기획에 욕심이 있는 까닭에 하고 싶어했다. 그러나 정규직만 가능했다. 나는 꾀를 냈다. 내 명의로 신청하고 그가 가는 걸로... 수업이 끝난 후 회사에서 사실을 알아챘다. 그러나 그다지 문제되지 않고 넘어갔다. 어쨌든 난 가능하다면 돕고 싶었다. 그리고 그에게 기회가 왔다. 수업을 진행한 교수가 자리를 제의했다. 아마 거울전쟁이었나. 그런데 슈팅 게임이었다. 또 하나는 이야소프트의 던전 히어로 개발 쪽이었다. 고민하는 그에게 나는 MMORPG 쪽을 하길 권했다. 그.. 2020. 2. 19. 200218 번복을 걱정했던 팀내 다른 분이 마침내 자리를 옮기셨다. 나는 번복당하고 그 충격이 엄청났다... 왜 회사에 남아서 수모를 당해야할까. 게임, 비게임 모두 기회가 있었다. 그러나 그 후에는 운이 없었다. 다음 기회를 잡기 위해 2개월을 기다려야했다. 기분이 나아졌지만 그때는 세상에서 제일 못난 사람이 나였다. 그래도 다행이다. 그 분은 실력있고 성실한 분이다. 그 팀에서도 분명 잘해내실 것이다. 내가 옮긴 팀에서는 DirectX와 셰이더를 주로 다룬다. 그간 게임 엔진만 알면 된다고 등한시했던 것을 말이다. 전환배치 기간 동안 느낀 점이 있는데 무언가 알아가는 건 재밌다는 사실이다. 구글 퀵랩도 해보고 장고나 nodejs로 웹서버 프로그램도 짜봤다. 그런데 왜 게임은 안 만들었을까. 그런 준비가 안되어있.. 2020. 2. 18. Valid Parentheses https://leetcode.com/problems/valid-parentheses/ 괄호가 잘 닫혔는지 검사하는 문제 class Solution: def isValid(self, s: str) -> bool: stack = [] pairs = { ')' : '(', ']' : '[', '}' : '{', } for ch in s: if ch in ( '(', '[', '{' ): stack.insert( 0, ch ) else: if not stack: return False else: openBracket = stack.pop( 0 ) if pairs[ ch ] != openBracket: return False return not stack 2020. 2. 12. Min Stack https://leetcode.com/problems/min-stack/ 스택을 구현하는 문제. 쉽다. class MinStack: def __init__(self): """ initialize your data structure here. """ self.__min = float( 'inf' ) self.__stack = [] def push(self, x: int) -> None: self.__min = min( self.__min, x ) self.__stack.insert( 0, x ) def pop(self) -> None: stack = self.__stack value = stack[ 0 ] self.__stack = stack[ 1 : ] if value == self.__min: self.. 2020. 2. 12. 200211 잘한 일: 쌓인 책 정리 2020. 2. 12. 200210 어제는 치통으로 몹시 괴로웠다. 그덕인지 눈도 왜 이리 아픈지... 참을 수 없어 진통제를 사러갈 정도였다. 이 끔찍한 경험은 20대 초반에 해본 이후로 다시는 겪지 않으려 애썼다. 매년 치과에 가고 스케일링도 하고 의사 하라는대로 다하고 최근에는 치실도 매일 하는데 이런 일이 생겼다. 약을 먹고 괴로워하다 낮잠을 자고나니 조금 나아졌다. 진통제를 안 먹고 버티다가 통증이 와서 다시 먹었다. 취침 시간부터 다시 고통이 찾아왔다. 물을 머금으면 나아져서 계속 그랬다. 덕택에 잠을 잘 수 없었다. 엎어져서 신음하다 잠이 들었다. 아침에는 조금 나아졌다. 팀을 옮긴지 첫날부터 연차를 쓰게 생겼다. 몹시 공교롭지만 어쩔 수 없다. 오늘 잘한 일: 아이하고 게임을 만들기 위해 스크래치를 살펴보았다. 만들기 쉽지만.. 2020. 2. 12. 초보 게임 개발자들을 위한 원로개발자 톰의 충고 언제인지 모르겠다. 아마 내가 http://ehei.x-y.net이란 블로그를 운영하고 있었을 때일 것이다. 아마 20년 가까이 전인 것 같다... 그 때는 게임 개발을 하고 싶어 몸이 달아 있었고 영어 공부도 하고 싶었다. 어디선가 http://www.sloperama.com/ 라는 사이트를 추천받았고 글을 제법 좋다고 생각했었던 것 같다. 그래서 겁도 없이 번역을 해보았다... 그런데 이걸 인터넷에서 찾아낼 수 있었다. 내가 워드 파일로 만들었었나... 기억은 없는데 누군가 깔끔히 정리해주신 것 같다. 저자를 보니 강석규님이라고 나오는데 감사드린다. 사실 살면서 잃어버리는 것이 누구나 있을 것이다. 나만 해도 그렇다. 예전에 그렸던 그림들, 작성했던 글들(특히 게임스팟에 썼던 게임 리뷰 글)이 없어진.. 2020. 1. 15. 가정 속의 마르지 않는 금맥 책은 부동산 투자로 부를 축적한 사람이 썼다. 최초에는 집을 소유할 것을 주장한다. 그러다 집 안에도 자산이 있음을 논한다. 나만 해도 집에 필요없는 물품을 헐값에 팔아버리는 쪽이긴 하다. 저자는 거기서 더 나간다. 생활용품 같은 소비재도 일종의 자산이며 사람들은 그걸 주기적으로 산다고 한다. 따라서 그런 소비재를 파는 사업에 종사하면 부를 얻을 수 있다고 주장한다. 그래서 금맥이란 단어가 나왔다. 아마 그런 사람을 프로슈머라 하나보다. 책에서 몇 번이고 그 말이 나온다. 명시적으로 언급하지는 않았지만 내가 도매업자가 아니라면 다단계 외에는 없을 것이다. 책이 주장하는 바는 맞다. 허나 그런 사업을 하는 주식을 사는 편이 좋다고 생각한다. 플랫폼에 종속되어 사업을 한다면 수익성이 있을까 의심한다. 어디나.. 2019. 12. 10. 또 가족이 생긴 날 결혼을 약속한 후 어느 날. 나는 그녀에게 입양을 하고 싶다고 했다. 후원도 좋지만 가족으로 인생을 책임져주고 싶다고 했다. 그녀도 찬성했다. 그녀는 마음씨가 곱다. 10년 동안 보육원에서 봉사했고, 2년 간 장애우 시설에서도 도왔다. 누구에게 의지하지 않고 다른 사람 탓도 하지 않는다. 돈이 있으면 쓰고 없으면 안 쓴다. 그런 그녀이기에 말을 꺼냈던 것 같다. 나는 친자가 없어도 입양 만으로도 좋다고 했다. 웬걸. 그녀는 반드시 친자를 키워보고 입양해야 한다고 했다. 애를 키워보지 않으면 선입견에 빠질 것이라고 했다. 나는 나름 차별은 모르는 사람이라 생각해서 그렇지 않을거라고 했다. 그러나 이걸 내 고집대로 할 수는 없는 노릇. 세월이 흘러 아이를 낳아 키우고 입양을 할 수 있는 기회가 왔다. 우리 .. 2019. 12. 10. Target Sum https://leetcode.com/problems/target-sum/ 주어진 값 S가 되도록 제시된 정수 집합으로 조합을 찾는 문제. 부호가 +,-가 될 수 있다. 어차피 모든 조합을 검사해야 하므로, 동적 프로그래밍 기법을 써서 반복 계산을 피해야 한다. import collections class Solution: def findTargetSumWays( self, nums, S: int ) -> int: if not nums: return 0 # key: remain nums, value: sum cases caches = collections.defaultdict( lambda : collections.defaultdict( int ) ) count, _ = self.__findTargetS.. 2019. 12. 4. Clone Graph https://leetcode.com/problems/clone-graph/ 그래프를 복사하는 문제. 결국은 모든 노드를 방문하므로, 이미 가본 곳만 가지 않도록 주의한다. """ # Definition for a Node. class Node: def __init__(self, val, neighbors): self.val = val self.neighbors = neighbors """ class Solution: def cloneGraph(self, node: 'Node') -> 'Node': visited = {} return self.__cloneGraph( node, visited ) def __cloneGraph( self, node, visited ): if node.val in visit.. 2019. 11. 26. Perfect Squares 어떤 정수가 주어졌을 때, 제곱이 되는 수로 어떤 합이 결정되는지 구하는 문제 https://leetcode.com/problems/perfect-squares/ import math class Solution: def numSquares(self, n: int) -> int: currentValues = { n } count = 0 while currentValues: nextValues = set() for currentValue in currentValues: for i in range( 1, int( math.sqrt( currentValue ) ) + 1 ): remainValue = currentValue - i * i if not remainValue: return count + 1 elif.. 2019. 11. 25. Open the Lock 숫자 네 개가 달린 자물쇠를 특정 숫자로 만드는 문제. 각 숫자는 한번에 한 칸만 옮겨진다. 난점은 막다른 골목(deadend)의 존재. 깊이 우선 탐색으로 해결하면 된다. https://leetcode.com/problems/open-the-lock/ class Solution: def openLock( self, deadends, target: str ) -> int: deadends = set( deadends ) currentNumbers = { '0000' } count = 0 visitedNumbers = set() while currentNumbers: visitingNumbers = set() for currentNumber in currentNumbers - deadends: if tar.. 2019. 11. 4. Number of Islands 행렬에 있는 1의 뭉치를 세는 문제. 너비 우선 탐색을 쓰면 쉽게 해결된다 https://leetcode.com/problems/number-of-islands/ class Solution: def numIslands(self, grid: List[List[str]]) -> int: visited = set() count = 0 rowCount = len( grid ) if not rowCount: return 0 columnCount = len( grid[ 0 ] ) if not columnCount: return 0 for row, rowList in enumerate( grid ): for column, v in enumerate( rowList ): if v == '1': if self.__pai.. 2019. 11. 4. Design Circular Queue 마지막 원소를 구하면 다시 첫 원소를 탐색하는 링 버퍼를 구현하는 문제 https://leetcode.com/problems/design-circular-queue/ class MyCircularQueue: def __init__(self, k: int): """ Initialize your data structure here. Set the size of the queue to be k. """ self.__queue = [ None ] * k self.__queueSize = k self.__head = 0 self.__tail = -1 self.__count = 0 def enQueue(self, value: int) -> bool: """ Insert an element into the circu.. 2019. 11. 1. Unique Binary Search Trees II 정수 n이 주어질 때 1~n까지의 수로 이진 트리를 구성할 경우의 수를 얻는다. 역시 동적 프로그래밍 기법으로 같은 해를 반복하지 않도록 해야 한다 https://leetcode.com/problems/unique-binary-search-trees-ii/ # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # Definition for a binary tree node. class TreeNode: def __init__( self, x ): self.val = x self.left = None self.right =.. 2019. 10. 25. K-th Symbol in Grammar 0부터 시작한다. 다음 줄부터는 0은 01로 1은 10으로 바꿔나간다. 이 때 줄의 개수 N이 주어질 때, K번째 항목이 뭔지 알아맞춰야 한다. 인덱스가 1부터 시작하니 주의. 트리의 깊이에 따라 패턴이 발견된다. 즉 왼쪽 노드는 부모와 값이 같고 오른쪽 노드는 반전된다. 이 점을 이용한다. # https://leetcode.com/problems/k-th-symbol-in-grammar/discuss/113710/Python-simple-solution-to-understand-with # -explanations class Solution: def kthGrammar( self, N: int, K: int ) -> int: if N == 1: return 0 return self.__kthGramme.. 2019. 10. 24. 이전 1 ··· 6 7 8 9 10 11 12 ··· 24 다음