java 122

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..

BOJ#4191 Dominos 2

BOJ#4191 Dominos 2 * 문제https://www.acmicpc.net/problem/4191 * 풀이어렵지 않은 문제였습니다.풀이는 아래 코드로 대체합니다. * 나의 코드 https://github.com/stack07142/BOJ/blob/master/BOJ%234191/src/Main.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { static ArrayList edge; static boolean[] visited;..

BOJ#2412 암벽 등반

BOJ#2412 암벽 등반 * 문제https://www.acmicpc.net/problem/2412 * 풀이BFS를 통해 암벽 정상까지 최소 이동 횟수를 구하면 됩니다.- 일단 Start 노드를 시작으로 인접한 노드들을 탐색하고 조건에 맞는 노드들만 다시 Queue에 넣어줍니다.- 조건 : |a-x| o2.col) return 1; if (o1.col == o2.col) { if (o1.row o2.row) return 1; } return 0; }; Queue queue = new LinkedList(); queue.add(new Node(0, 0)); int step = -1; while (!queue.isEmpty()) { step++; ..

BOJ#1963 소수 경로

BOJ#1963 소수 경로 * 문제https://www.acmicpc.net/problem/1963 * 풀이- 구하는 것 :두 소수 변환에 필요한 최소 변환 횟수 (최단 경로, 가중치 1이고 경우의 수가 많지 않으므로 BFS 탐색 가능) - 조건 : 4자리수, 소수로만 이동 가능, 중복 방문 x - 예를 들어 Test Case가 '1033 8179'인 경우 step = 0;1) 1033에서 한자리수를 변경해서 만들 수 있는 모든 소수들을 구한 후 Queue에 넣는다. (step = 1)2) step == 1인 Queue에 들어있는 모든 수에 대해 반복 (step = 2)3) step == 2인 Queue에 들어있는 모든 수에 대해 반복 (step = 3)....결국 step == n에서 8179를 찾게 ..

BOJ#4485 녹색 옷 입은 애가 젤다지?

BOJ#4485 녹색 옷 입은 애가 젤다지? * 문제https://www.acmicpc.net/problem/4485 * 풀이다익스트라 (Priority Queue 이용)개념만 알면 풀 수 있는 기본 문제이므로 설명은 생략합니다. * 나의 코드 https://github.com/stack07142/BOJ/blob/7abd485c7bdc3853570ff8d262afbd03b7234709/BOJ%234485/src/Main.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.PriorityQueue; import java.util.StringTokenize..