전체 글 46

[Hackerrank] Sherlock and Cost

한동안 못 보다가 다시 틈 날 때마다 알고리즘 문제를 하나씩 보고 있다. 전에는 백준에 주로 갔었는데 요샌 귀찮아서 Hackerrank에서 하나씩. 그리고 이제부터 푸는 문제는 차차 정리해서 올리기로! 예전에 풀었던 문제들도 언젠가... 오늘은 Sherlock and Cost 문제를 풀었고, Dynamic Programming 카테고리에 있는 문제다. 전체 코드는 가장 아래에 있다. 내가 생각한 식은 대략 아래와 같다. $$ \begin{cases} S[i][1선택] = max(S[i - 1][1선택], S[i - 1][B_i선택] + (B[i - 1] - 1)) \newline S[i][B_i선택] = max(S[i - 1][1선택] + (B[i] - 1), S[i - 1][B_i선택] + abs(B[..

Dev/Algorithm 2019.06.26

Scalatest - fixtures에 System-Rules 결합하기

JUnit Rules - System-Rules 요즘 Scala test code를 열심히 작성하는 중이다. (블로그에 이 글을 작성하는 시점에선 어언... 4개월 쯤 전?) 당연히 ScalaTest 사이트를 뻔질나게 드나드는 중인데, 본래 Scala와도 그다지 친하지 않았는데 ScalaTest는 당연히 낯선 친구라서 어려워 하고 있다. 오늘 회사에서 누군가가 남겨놓고 떠난 코드에 얄팍하게나마 테스트 코드를 작성하던 중에 코드 내에 System.getenv를 호출하는 부분이 있다는 걸 알았고, 테스트만을 위해 로컬에 환경변수를 설정하기엔 몹시 애매한 상황이어서 아니 이걸 어떻게 하지??? 하다가 JUnit rules형태의 System-Rules라는 library가 있다는 걸 알게 되었다. 들어가보면 알겠..

Dev/etc 2017.07.18

[Clean Code] Chapter 3. 함수

Chapter 3. 함수 함수는 프로그램의 가장 기본적인 단위 읽기 쉽고 이해하기 쉬운 함수 의도를 분명히 표현하는 함수 3.1 작게 만들어라 명백한 함수. 각 함수가 이야기 하나를 표현 if/else, while 등에 들어가는 블록은 한 줄로 들여쓰기는 2단을 넘어가지 않게 3.2 한 가지만 해라 함수는 한가지를 해야 한다. 한 가지를 잘해야 한다. 한 가지만 해야 한다. 문제! 그 '한 가지' 가 뭘까 지정된 함수 이름 아래 '추상화 수준'이 하나 우리가 함수를 만드는 이유를 생각해봐! 큰 개념(다시 말해, 함수 이름)을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위함 아님? 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그건 이미 여러 가지 작업을 하고 있다는 의..

Dev books 2017.03.23

[Clean Code] Chapter 2. 의미있는 이름

Chapter 2. 의미 있는 이름 2.1 들어가면서 이름은 아주 오만데에 다 쓰이지... 그러니까 잘 지어보자 ^_^ 2.2 의도를 분명히 밝혀라 좋은 이름을 짓는데 걸리는 시간 < 좋은 이름으로 절약하는 시간 변수(함수 or 클래스)의 존재 이유? 수행 기능? 사용 방법? => 이름으로 답할 수 있어야 함 2.3 그릇된 정보를 피하라 AccountList가 있다고 치자. 사실 이 객체가 List형태가 아니라면? => Group, bunchOfAccounts, Accounts등으로 쓰자. 습관적으로 List라고 이름짓지 말 것. 흡사한 이름 지양 일관성이 떨어지는 명명도 그릇된 것 2.4 의미 있게 구분하라 tmp01 이런 거 쓰지 말라고-_- Noise word 추가하지 마 Product Produc..

Dev books 2017.01.26

[Clean Code] Chapter 1. Clean Code

Chapter 1. Clean Code 여러분이 이 책을 읽고 있다면 이유는 두 가지다. 첫째, 프로그래머라서. 둘째, 더 나은 프로그래머가 되려고. 다행이다! 우리 업계는 더 나은 프로그래머가 필요하니까. 우앙! *_* 1.1 코드가 존재하리라 코드는 요구 사항을 상세히 표현하는 수단이다. 코드는 기계가 이해할 정도로 엄밀하고, 정확하고, 상세하고, 정형적이어야 한다. 그렇기에 코드 자동 생성이라는 말은 불가능한 말이다. 코드는 사라지지 않는다.1.2 나쁜 코드 좋은 코드는 중요하다. 조금이라도 프로그래밍을 해봤다면, 나쁜 코드에 고생해본 기억이 있을 것이다. 우리는 모두 자신이 짠 쓰레기 코드를 나중에 고치리라고 생각해봤을 것이다. 안 돌아가는 프로그램보단 돌아가는 쓰레기가 낫다고 스스로를 위로해 본..

Dev books 2017.01.10

[Java] Upper bounded wildcards

Upper Bounded Wildcards 변수에 대한 제한을 좀 느슨하게 하기 위해 upper bounded wildcard를 사용할 수 있다. 예를 들어, List, List, 그리고 List를 다루는 메소드를 작성하고 싶다고 해보자; 이건 upper bounded wildcard를 이용해 작성할 수 있다. upper-bounded wildcard를 선언하기 위해서는 wildcard character (‘?‘)를 사용하고, 그 다음 extends keyword를, 마지막으로 upper bound가 뒤따른다. 주의할 것은 이 문맥에서 extends는 일반적인 느낌의 “extends”(class에서 사용되는)와 “implements”(interface에서 사용되는) 둘 다 의미하는 것으로 사용한다. Nu..

Dev/Java 2016.12.28

[CentOS] rpm 을 이용해 gcc 수동 설치

# rpm -Uvh gcc-c++ # rpm -Uvh gcc # rpm -Uvh cpp # rpm -Uvh libmpc # rpm -Uvh mpfr # rpm -Uvh glibc-devel # rpm -Uvh glibc-headers # rpm -Uvh kernel-headers # rpm -Uvh libgomp # rpm -Uvh libstdc++-devel 회사에서 yum이 안돼서.... rpm 파일을 하나씩 받아서 수동으로 설치했다.각각 바로 하위에 있는 아이들이 dependencies. 따라서 트리 구조 오른쪽 끝부터 차례대로 설치해야 한다.일부러 버전 정보는 뺐다. RPM 받을 수 있는 곳http://rpm.pbone.net/

Dev/etc 2016.08.24 (3)

Tistory블로그에 수식 입력하는 법

요즘 Coursera에서 Machine Learning 강의를 듣고 있다. 보통 강의를 들으면서 강의 내용을 대강 내가 이해할 수 있는 정도로 메모를 해두는 편이고, 이왕이면 정리해서 블로그에 올리는 게 낫겠다 싶어 컴퓨터로 작성하는 중인데 생각보다 수식이 많다. 그럼에도 수식 작성이 쉽지 않다. 고작 한주차 듣고 이제 2주째 접어드는 데 이런 어려움이 나타났다. 그래서 tistory 수식 작성 이라고 검색하니 예상외로 꽤 많은 글이 나왔다. 그래서 블로그에 적용해보았다. 주로 MathJax를 이용한 방법이었는데, 알고보니 이게 LaTeX문법과 거의 같다고 한다. 논문 쓸 때 많이 사용한다는 이야기만 들었지 한 번도 써보진 않았는데, 이 참에 배워보기로 결심. 적용하는 방법은 꽤 쉽다. tistory 블..

Dev/etc 2016.07.20

[Coursera] Machine Learning Week 1

Introduction Welcome 수많은 인공 지능 연구자들의 목표는 인간의 뇌를 흉내내서 만들어 인간의 뇌와 비슷하게 학습하게 만드는 것 알고리즘을 사용할 것임 -> 어떻게 유도되는지는 알 필요 없음 Introduction Welcome Machine Learning Grew out of work in AI New capability for computers Machine Learning Examples Database mining(데이터베이스 수집) Large datasets from growth of automation/web. E.g. Web click data, medical records, biology, engineering Applications can't program by hand ..