백준 156

BOJ#10164 격자상의 경로

BOJ#10164 격자상의 경로 * 문제https://www.acmicpc.net/problem/10164 * 풀이카카오 블라인드 채용 - 1차 테스트의 모의 테스트에 나온 문제와 유사합니다. 점화식은 간단하게 dp[row][col] = dp[row-1][col] + dp[row][col-1] 임을 알 수 있습니다. 단, K가 0이 아닌 경우 경유지가 1개 있는 것이므로이 경우 시작점->경유지, 경유지->도착점의 경우의 수를 각각 구한 뒤 곱해주면 원하는 답을 얻을 수 있습니다. * 나의 코드 https://github.com/stack07142/BOJ/blob/4cccafbf34e20c197249ac96c20b33f15e644bb1/BOJ%2310164/src/Main.java import java.i..

Algorithm/DP 2017.09.26

BOJ#1904 01타일

BOJ#1904 01타일 * 문제https://www.acmicpc.net/problem/1904 * 풀이수열은 끝이 1 또는 00인 2가지 경우로 나눌 수 있습니다.따라서 dp 점화식은 dp[i] = dp[i-1] + dp[i-2] * 나의 코드https://github.com/stack07142/BOJ/blob/a028fa1300ba4112e41be95b11d5daed4b71e8b8/BOJ%231904/src/Main.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { static final int MOD = 15746; static int[]..

Algorithm/DP 2017.09.25

BOJ#1915 가장 큰 정사각형

BOJ#1915 가장 큰 정사각형 * 문제https://www.acmicpc.net/problem/1915 * 풀이카카오 모의 테스트에서 나온 문제와 동일합니다. 풀이 아이디어는 다음과 같습니다.검사 위치에서 인접한 3방향(위쪽, 왼쪽, 왼쪽위 대각선 )의 값을 검사하여검사 위치의 값을 최소값 + 1으로 갱신해줍니다. * 나의 코드https://github.com/stack07142/BOJ/blob/master/BOJ%231915/src/Main.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class M..

Algorithm/DP 2017.09.22

BOJ#1309 동물원

BOJ#1309 동물원 * 문제https://www.acmicpc.net/problem/1309 * 풀이N이 1일 때부터 3일때까지 그림을 직접 그려보면 규칙을 찾으실 수 있을겁니다. 점화식dp[row][0] = (dp[row - 1][0] + dp[row - 1][1] + dp[row - 1][2]) % MOD; dp[row][1] = (dp[row - 1][0] + dp[row - 1][2]) % MOD; dp[row][2] = (dp[row - 1][0] + dp[row - 1][1]) % MOD; * 나의 코드https://github.com/stack07142/BOJ/blob/master/BOJ%231309/src/Main.java import java.io.BufferedReader; impo..

Algorithm/DP 2017.09.15

BOJ#2096 내려가기

BOJ#2096 내려가기 * 문제https://www.acmicpc.net/problem/2096 * 풀이메모리 제한이 4MB 입니다. 저는 처음에 재귀 형식으로 풀었다가 바텀업 방식으로 다시 풀었습니다. 또한, [100001][3] 사이즈의 dp배열과 map 배열을 모두 제거하였습니다. 두가지 형태의 코드 모두 아래에 붙여놓았으니 참고하시면 좋겠습니다. * 나의 코드 https://github.com/stack07142/BOJ/blob/458582301c132e9a61af00c77068edac24669619/BOJ%232096/src/Main.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream..

Algorithm/DP 2017.09.12

BOJ#2294 동전 2

BOJ#2294 동전 2 * 문제https://www.acmicpc.net/problem/2294 * 풀이dp 기본 문제입니다.solve 함수는 크게 3부분으로 구성되어 있습니다. dp 정의dp[coinSum] : 현재 동전의 합이 coinSum일 때, k가 되기 위해 추가해야 하는 동전의 최소 개수solve(coinSum) 함수 : dp[coinSum]을 반환하는 함수. 1. 기저 사례동전의 합이 k에 딱 맞는 경우, return 0동전의 합이 k에 맞지 않는 경우, return 매우 큰 수 if (coinSum == k) return 0; if (coinSum > k) return INF; 2. 메모이제이션 dp 배열의 값을 -1로 초기화 했습니다. 즉, dp[coinSum]이 -1인 경우 메모이제이..

Algorithm/DP 2017.09.12

BOJ#1219 오민식의 고민

BOJ#1219 오민식의 고민 * 문제https://www.acmicpc.net/problem/1219 * 풀이벨만-포드 최단거리 문제입니다. 간선 cost는 음수이고, 각 노드마다 추가로 돈을 벌 수 있습니다.원하는 것은 S(시작점)에서 D(도착점)까지 갈 때 최대로 벌 수 있는 돈의 액수를 구하는 것입니다. 일반적으로 문제에서 간선의 cost가 양수로 주어지는 반면,이 문제에서는 간선 cost가 음수이므로음수 사이클은 문제가 되지 않고 반대로 양수 사이클인 경우가 문제 됩니다. 벨만-포드 알고리즘에 따라 (엣지수(M)만큼 Relaxation)을 N-1번 반복하고N번째에도 Relaxation이 되면 사이클이 존재함을 알 수 있습니다. 그러나 우리는 사이클 유무를 판단하는 것이 목적이 아니라시작점에서 도..

BOJ#6603 로또

BOJ#6603 로또 * 문제https://www.acmicpc.net/problem/6603 * 풀이주어진 숫자에서 6개의 숫자를 고르는 문제입니다. 간단히 조합을 돌려서 해결했습니다. 각각의 숫자에 대하여 뽑는 경우, 뽑지 않는 경우로 나누고잘뽑은 경우에만 출력을 했습니다. * 나의 코드https://github.com/stack07142/BOJ/blob/master/BOJ%236603/src/Main.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static voi..