๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1577
โธ ๋ฌธ์
์ธ์ค์ด๊ฐ ์ด๊ณ ์๋ ๋์๋ ์ ๊ธฐํ๊ฒ ์๊ฒผ๋ค. ์ด ๋์๋ ๊ฒฉ์ํํ๋ก ์๊ฒผ๊ณ , ์ง์ฌ๊ฐํ์ด๋ค. ๋์์ ๊ฐ๋ก ํฌ๊ธฐ๋ N์ด๊ณ , ์ธ๋ก ํฌ๊ธฐ๋ M์ด๋ค. ๋, ์ธ์ค์ด์ ์ง์ (0, 0)์ ์๊ณ , ์ธ์ค์ด์ ํ๊ต๋ (N, M)์ ์๋ค.
๋ฐ๋ผ์, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์๊ฒผ๋ค.
์ธ์ค์ด๋ ์ง์์ ํ๊ต๋ก ๊ฐ๋ ๊ธธ์ ๊ฒฝ์ฐ์ ์๊ฐ ์ด ๋ช ๊ฐ๊ฐ ์๋์ง ๊ถ๊ธํด์ง๊ธฐ ์์ํ๋ค.
์ธ์ค์ด๋ ํญ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ก๋ง ๊ฐ๊ธฐ ๋๋ฌธ์, ํญ์ ๋๋ก๋ฅผ ์ ํํ๊ฒ N + M๊ฐ ๊ฑฐ์น๋ค. ํ์ง๋ง, ์ต๊ทผ ๋ค์ด ์ด ๋์์ ๋๋ก๊ฐ ๋ถ์ค๊ณต์ฌ ์ํน์ผ๋ก ๊ณต์ฌ์ค์ธ ๊ณณ์ด ์๋ค. ๋๋ก๊ฐ ๊ณต์ฌ ์ค์ผ ๋๋, ์ด ๋๋ก๋ฅผ ์ง๋ ์ ์๋ค.
(0, 0)์์ (N, M)๊น์ง ๊ฐ๋ ์๋ก ๋ค๋ฅธ ๊ฒฝ๋ก์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
โธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋๋ก์ ๊ฐ๋ก ํฌ๊ธฐ N๊ณผ ์ธ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. N๊ณผ M์ 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๊ณ , ๋์งธ ์ค์๋ ๊ณต์ฌ์ค์ธ ๋๋ก์ ๊ฐ์ K๊ฐ ์ฃผ์ด์ง๋ค. K๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ์ ์งธ ์ค๋ถํฐ K๊ฐ ์ค์๋ ๊ณต์ฌ์ค์ธ ๋๋ก์ ์ ๋ณด๊ฐ a b c d์ ๊ฐ์ด ์ฃผ์ด์ง๋ค. a์ c๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๊ณ , b์ d๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , M๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ , (a, b)์ (c, d)์ ๊ฑฐ๋ฆฌ๋ ํญ์ 1์ด๋ค.
โธ ์ถ๋ ฅ
์ฒซ์งธ ์ค์ (0, 0)์์ (N, M)๊น์ง ๊ฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ์ด ๊ฐ์ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 263-1๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ๊ณจ๋ 5
- ๐ ๋ฌธ์ ์ ํ : ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํด ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ธ์ค์ด๋ ํญ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ก๋ง ์ด๋ํ๋ฏ๋ก, ์ด๋ํ ์ ์๋ ๋ฐฉํฅ์ ์ค๋ฅธ์ชฝ ๋๋ ์๋์ชฝ ๋ ๊ฐ์ง๋ฟ์ด๋ค.
๋ฐ๋ผ์, (0, 0)์์ (N, M)๊น์ง ๋๋ฌํ๋ ๊ฒฝ๋ก์ ๊ฒฝ์ฐ์ ์๋ฅผ dp ๋ฐฐ์ด์ ์ด์ฉํด ๊ณ์ฐํ ์ ์๋ค.
1๏ธโฃ ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ map ๋ฐฐ์ด
๊ฐ ์์น (i, j)์์ ์ด๋ํ ์ ์๋ ๋ฐฉํฅ์ ์ ์ฅํ๊ธฐ ์ํด 3์ฐจ์ ๋ฐฐ์ด์ ์ ์ธํ๋ค.
- map[i][j][0] → ์๋์ชฝ ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ
- map[i][j][1] → ์ค๋ฅธ์ชฝ ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ
- ๊ฐ์ด -1์ด๋ฉด ํด๋น ๋ฐฉํฅ์ผ๋ก ์ด๋ ๋ถ๊ฐ๋ฅ
๊ณต์ฌ ์ค์ธ ๋๋ก๊ฐ ์์ ๊ฒฝ์ฐ, ์ด๋์ด ๋ถ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ค.
์ด๋, ๊ณต์ฌ ์ค์ธ ๋๋ก์ ์ ๋ณด (x1, y1) → (x2, y2)์ ์ ๋ ฅ ์์๊ฐ ๋ค๋ฐ๋์์ ์๋ ์๋ค.
๋ฐ๋ผ์, ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ ์ขํ๋ฅผ ์ ๋ ฌํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
2๏ธโฃ DP ๋ฐฐ์ด ์ ์ ๋ฐ ์ ํ์
dp[i][j] → (0,0)์์ (i, j)๊น์ง ๊ฐ ์ ์๋ ๊ฒฝ๋ก์ ๊ฐ์์ด๋ค.
๋จผ์ , dp[0][0] = 1๋ก ์ด๊ธฐํํ๋ค. (์ถ๋ฐ์ )
- ์ค๋ฅธ์ชฝ ์ด๋ ๊ฐ๋ฅ (map[i][j][1] != -1) → dp[i][j] += dp[i][j-1] (j-1 ≥ 0)
- ์๋์ชฝ ์ด๋ ๊ฐ๋ฅ (map[i][j][0] != -1) → dp[i][j] += dp[i-1][j] (i-1 ≥ 0)
dp์ ๊ฐ์ด int์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฏ๋ก ํ์ ์ long์ผ๋ก ์ง์ ํด์ผ ํ๋ค.
3๏ธโฃ ์ต์ข ๊ฒฐ๊ณผ
dp[n][m] ๊ฐ์ด (0, 0) → (N, M)๊น์ง์ ๋ชจ๋ ์ต๋จ ๊ฒฝ๋ก ์๊ฐ ๋๋ค.
์ ํ์ด๋ฅผ ์ฝ๋๋ก ์์ฑํด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 11980KB
์๊ฐ : 68ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // ๋๋ก์ ๊ฐ๋ก
int m = Integer.parseInt(st.nextToken()); // ์ธ๋ก
// map[i][j][k] : (i, j)์์ k ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์๋์ง
// ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก / ์์์ ์๋๋ก -> ์ด ๋ ๋ฐฉํฅ์ผ๋ก๋ง ์ด๋ ๊ฐ๋ฅํ๋ค.
int[][][] map = new int[101][101][2];
long[][] dp = new long[101][101]; // *
int k = Integer.parseInt(br.readLine()); // ๊ณต์ฌ์ค์ธ ๋๋ก์ ๊ฐ์
// ๊ณต์ฌ์ค์ธ ๋๋ก ์ ๋ณด
int x1, y1, x2, y2;
for (int i = 0; i < k; i++) {
st = new StringTokenizer(br.readLine());
x1 = Integer.parseInt(st.nextToken());
y1 = Integer.parseInt(st.nextToken());
x2 = Integer.parseInt(st.nextToken());
y2 = Integer.parseInt(st.nextToken());
// -1์ด๋ผ๋ฉด ์ด๋ ๋ถ๊ฐ๋ฅ
if (y1 == y2) {
// ์
๋ ฅ์ ์์๊ฐ ๋ฐ๋ ์๋ ์์ผ๋ฏ๋ก
// ๊ฐ์ ๋ฐ๊ฟ์ฃผ๋ ๊ณผ์ ํ์
if (x1 > x2) {
int tmp = x1;
x1 = x2;
x2 = tmp;
}
map[x2][y1][0] = -1; // ์๋๋ก ์ด๋ ๋ถ๊ฐ๋ฅ / ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ์ด๋
}
if (x1 == x2) {
if (y1 > y2) {
int tmp = y1;
y1 = y2;
y2 = tmp;
}
map[x1][y2][1] = -1; // ์ผ์ชฝ ์ด๋ ๋ถ๊ฐ๋ฅ / ์์์ ์๋๋ก ์ด๋
}
}
dp[0][0] = 1;
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) {
if (map[i][j][0] != -1 && i-1 >= 0) { // x ๋ฐฉํฅ ์ด๋ ๊ฐ๋ฅ
dp[i][j] += dp[i-1][j];
}
if (map[i][j][1] != -1 && j-1 >= 0) { // y ๋ฐฉํฅ ์ด๋ ๊ฐ๋ฅ
dp[i][j] += dp[i][j-1];
}
}
}
System.out.println(dp[n][m]);
br.close();
}
}
๊ตฌํํ๋ ๋ฐ ์กฐ๊ธ ์ค๋ ๊ฑธ๋ฆฌ๊ธด ํ์ง๋ง, dp๋ฅผ ํ๋ฉด์ ์ฌ๋ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ ๋ฌธ์ ์ด๋ค.
๋ค๋ฅธ dp ๋ฌธ์ ๋ ํ์ด๋ด์ผ์ง ! ๐ฅ
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_15980] ๋ช ์ ๋ฐฉํด๊พผ (0) | 2025.04.16 |
---|---|
[Boj_7579] ์ฑ (0) | 2025.03.25 |
[Boj_19542] ์ ๋จ์ง ๋๋ฆฌ๊ธฐ (0) | 2025.03.17 |
[Boj_1937] ์์ฌ์์ด ํ๋ค (0) | 2025.03.04 |
[Boj_22963] 3์ด ์ ๋ ฌ (0) | 2025.02.26 |