-
백준 2698번 인접한 비트의 개수 :: 마이구미알고리즘 풀이/동적계획법 2017. 11. 30. 20:21
이 글은 백준 알고리즘 문제 2698번 "인접한 비트의 개수" 를 풀이한다.풀이 방법으로는 동적계획법을 이용한다.문제 링크 - https://www.acmicpc.net/problem/2698 0과 1로 이루어진 수열 S가 있다. S의 첫 수는 s1이고, 마지막 수는 sn이다. S의 인접한 비트의 개수는 다음과 같이 구할 수 있다.s1*s2 + s2*s3 + s3*s4 + ... + sn-1 * sn위의 식을 이용하면 수열 S에서 인접한 1의 개수를 구할 수 있다. 예를들어, 011101101의 인접한 비트의 개수는 3이 되고, 111101101은 4, 010101010은 0이 된다.수열 S의 크기 n과 k가 주어졌을 때, 인접한 비트의 개수가 k인 수열 S의 개수를 구하는 프로그램을 작성하시오.예를 들..
-
백준 10844번 쉬운 계단 수 :: 마이구미알고리즘 풀이/동적계획법 2017. 11. 27. 20:33
이 글은 백준 알고리즘 문제 10844번 "쉬운 계단 수" 를 풀이한다.풀이 방법으로는 동적계획법으로 설명한다.문제 링크 - https://www.acmicpc.net/problem/10844 45656이란 수를 보자.이 수는 인접한 모든 자리수의 차이가 1이 난다. 이런 수를 계단 수라고 한다.세준이는 수의 길이가 N인 계단 수가 몇 개 있는지 궁금해졌다.N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (0으로 시작하는 수는 없다.) 인접한 모든 자리수의 차이가 1인 수를 어떻게 찾을까?직접 적어보면 쉽게 점화식을 만들어낼 수 있다. N = 1=> 1, 2, 3, 4, 5, 6 ......N = 2=> 10, 12, 21, 23, 32, 34, 43, 45 ....
-
UML diagram in vscode :: 마이구미개발 설정 2017. 11. 27. 18:06
이 글은 개발툴에서 UML 다이어그램을 작성하는 방법을 다뤄본다.정확히는 관련 플러그인을 설치하는 과정을 다루는 글이 된다.개발툴 - vscode(Visual Studio Code)플러그인 - PlantUML PlantUML 공식 사이트 - http://plantuml.com/ 글을 다루기 전에 만약 독자 중 UML 다이어그램에 관심도 사용할 생각도 없었다면 읽어보길 바란다.분명 도움이 될 것이다.본인 또한 다이어그램을 통한 모델링은 실무에서 한번도 사용한 적이 없다.학교에서만 배웠고 그 시절엔 이걸 왜 배워야하는지 모른 상태였기 때문에 이후 접하지 않았다.현재는 설계의 중요성을 느껴 늦었지만 지금이라도 습관을 들여보도록 한다. 본인은 클래스 다이어그램을 작성하기 위해 관련 툴을 찾고 있었다.이왕이면 현..
-
연쇄 행렬 곱셈 (Matrix chain multiplication) :: 마이구미알고리즘 2017. 11. 27. 00:14
이 글은 연쇄 행렬 곱셈(Matrix chain multiplication) 알고리즘을 다룬다.동적계획법이 기반으로 된 알고리즘이다.위키 내용과 관련 알고리즘 문제를 참고했다. (위키는 번역본이 아직 없다)참고 링크 - https://en.wikipedia.org/wiki/Matrix_chain_multiplication 연쇄 행렬 곱셈은 최적화 문제를 동적계획법(DP) 을 이용하여 해결할 수 있다.행렬의 순서가 주어질 때, 행렬의 곱셈에서 가장 효율적인 방법을 찾는 것이 목표이다.문제는 실제로는 곱셈을 수행하는 것이 아니라 행렬의 곱셈 순서를 결정하는 것이다. 행렬 곱셈에 있어서, 괄호를 어디에 넣어도 같은 결과를 만든다.이것이 의미하는 것은 예를 통해 확인해보자.4개의 행렬 A, B, C, D 를 가..
-
추상 클래스 vs 인터페이스 :: 마이구미Java 2017. 11. 25. 17:17
이 글은 Java 에서 사용되는 추상클래스와 인터페이스의 차이점을 다룬다.Java 를 사용하지 않더라도, 참고하면 도움이 될 것이다. Java 에서 추상 클래스와 인터페이스를 많이 헷갈려한다.그 이유는 겉으로 보기에는 똑같아 보이기 때문이다.하지만 엄연히 다른 목적을 가지고 있다.지금부터 차근차근 궁금증을 풀어보자. 인터페이스는 무엇인가? 인터페이스는 쉽게 말하면 껍데기라고 말할 수 있고, 설계도 또는 명세라고 생각하면 된다.모든 메소드가 추상 메소드이고, 일반 변수를 가질 수 없다. (추상 클래스와 비교해보자)그 의미는 인터페이스를 구현한 클래스는 모든 메소드를 강제적으로 구현해야한다.선언 시 interface 키워드를 사용한다. interface Vehicle { abstract void run ()..
-
eclipse 자동완성 기능 :: 마이구미개발 설정 2017. 11. 25. 15:19
이 글은 이클립스에서 자동완성 기능을 알아본다.내부적으로는 Content Assist 라고 불리는 기능이다.만약 sysout이 작동이 안된다면 이 글을 참고해도 좋을 것이다. Content Assist 기능을 사용하는 대표적인 예는 sysout이다.sysout 의미는 다음과 같다. sysout => System.out.println(); 가장 많이 쓰이는 코드이지만, 다소 길기 때문에 위와 같이 짧게 사용할 수 있다.이 기능은 Ctrl + Space 를 통해 사용할 수 있다. 위 기능이 되지 않는다면 다음을 확인해보면 된다.Preferences => Java => Editor => Content Assist => Advanced Java Proposals 가 체크되어있지 않다면, 체크해주면 된다.그래도 ..
-
Java in vscode :: 마이구미개발 설정 2017. 11. 25. 14:21
이 글은 vscode(visual studio code) 에서 java를 사용하기 위한 셋팅을 알아본다.java의 프로젝트 관리 도구인 maven 을 사용한다.참고 링크 - https://stackoverflow.com/questions/46671308/maven-creating-a-java-project-that-works-in-vs-code vscode에서 java를 사용하기 위해 필요한 순서를 알아보자. 1. vscode와 maven 이 설치가 되어있어야한다. maven 설치는 osx 기준으로 진행한다. (참고 링크 - os 별 설치법) 본인은 다운로드한 maven 디렉토리를 /usr/local/ 로 옮길 것이다. mv Downloads/apache-maven /usr/local/ 그 후 .bash..
-
백준 2624번 동전 바꿔주기 :: 마이구미알고리즘 풀이/동적계획법 2017. 11. 21. 20:18
이 글은 백준 알고리즘 문제 2624번 "동전 바꿔주기" 를 풀이한다.풀이 방법으로는 동적계획법을 통해 진행된다.문제 링크 - https://www.acmicpc.net/problem/2624 명보네 동네 가게의 현금 출납기에는 k 가지 동전이 각각 n1, n2, … , nk개 씩 들어있다. 가게 주인은 명보에게 T원의 지폐를 동전으로 바꿔 주려고 한다. 이때, 동전 교환 방법은 여러 가지가 있을 수 있다. 예를 들어, 10원 짜리, 5원 짜리, 1원 짜리 동전이 각각 2개, 3개, 5개씩 있을 때, 20원 짜리 지폐를 다음과 같은 4가지 방법으로 교환할 수 있다.20 = 10×2 20 = 10×1 + 5×2 20 = 10×1 + 5×1 + 1×5 20 = 5×3 + 1×5입력으로 지폐의 금액 T, 동전..