목록Algorithm/문제 풀이 (5)
DNF LOVE

알고리즘 시험 유형 중 가장 기본 중 기본이 소인수 분해, 약수 구하기가 아닌가 싶다. 당연히 '약수를 구하는 알고리즘을 구현하시오'가 아닌 약수를 이용한 심화된 알고리즘을 풀어야 한다. [약수 구하기] '약수'란, 어떤 수로 정수가 나누어떨어지는것을 대하여 이르는 말이다. 그리고 1과 자기자신으로밖에 나누어 떨어지지 않는 수를 우리는 소수라고 부른다. 그렇다면 약수를 알고리즘 화 시키는 것은 어떻게 해야할까? 약수의 정의를 조금 다르게 해보자. 어떤 자연수 a, b가 있을 때 a를 b로 나누었을 때 나머지가 0이면 b는 a의 약수라 한다. 이렇게 정의를 알고리즘 화시켜보면 if문과 for문을 어떻게 활용해야할지 감이 잡히게 된다, import java.util.*; public class divisor..

DP알고리즘의 또 다른 문제 2xn타일 구하기 문제이다. 이 문제도 어제 풀었던 1, 2, 3 더하기와 똑같은 원리로 이루어져 있다. 우선, 타일은 2x1 과 1x2 이 두가지가 주어진다. 그러다면 우리가 바로 알 수 있는 경우의 수는 1일떄와 2일때이다. tile[1] 일때, 2x1 하나밖에 쓰이지 못하니 경우의 수는 1이다. 또, tile[2] 일때, 2x1 타일을 두개 겹친 것과 1x2 타일을 가로로 두 개 겹친 것해서 경우의 수는 2가지가 나온다. 그렇다면 3일때는 어떨까? 2x1타일을 앞에 세울 때, 2가지 경우와 1x2타일을 두개로 겹쳐서 2x2로 만들때 1가지 경우의 수를 더하면 3가지의 경우의 가지가 나온다. 그렇다. 2x1타일을 맨 앞에 세웠을 때의 경우의 수와 1x2타일을 가로로 겹쳐 ..

백준 9095번 DP의 기본 문제 1, 2, 3번 더하기 문제를 풀어봤다. 게임 개발을 해봤으면서 주 언어가 JAVA인 나는 자바로 풀이를 하겠다. 이 문제의 원리는 매우 간단하다. 이 문제는 하나의 자연수를 1, 2, 3 으로만 조합하여 더해서 해당 자연수가 나오는 경우의 수를 구하는 문제이다. 그렇다면 먼저 1, 2, 3의 경우의 수를 찾아 봐야 한다. d[0]은 0 d[1] = 1밖에 없으니 경우의 수는 1 d[2] = (1 + 1), (2) 즉 경우의 수는 2 d[3] = (1 + 1 + 1), (1 + 2), (2 + 1), (3) 즉 경우의 수는 3 이렇게 되어 있을 때 d[4]는 (1+1+1+1), (1+1+2), (1+2+1), (2+1+1), (2+2), (1+3), (3+1) 으로 7개..