Tags
- ๊ทธ๋ํ ์ด๋ก
- Study
- BOJ
- ๊ทธ๋ํ ํ์
- ์๋ฃ๊ตฌ์กฐ
- ๋ฌธ์์ด
- DP
- Dynamic Programming
- ์๋ฎฌ๋ ์ด์
- PGM
- ์ ๋ ฌ
- ๋ฐฑํธ๋ํน
- Brute Force Algorithm
- SpringBoot
- dfs
- stack
- ๊ตฌํ
- ๋๋น ์ฐ์ ํ์
- Java
- ์ํ
- LV2
- ๊น์ด ์ฐ์ ํ์
- greedy
- CodingTest
- BFS
- Python
- queue
- ๊ต์ฌ
- ์ ์๋ก
- sort
Archives
๊ธฐ๋ก๋ฐฉ
Lv.3 : ๊ณต ์ด๋ ์๋ฎฌ๋ ์ด์ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ๋ฌธ์ ๋ ์ฟผ๋ฆฌ ๋ช ๋ น์ ๋ฐ๋ผ n x m ๊ฒฉ์ํ์์ ์ด๋ํ๋ ๊ณต์ ์๋ฎฌ๋ ์ด์ ์ค๋ช ์ด ์ฃผ์ด์ง๋ค.
- ์ฟผ๋ฆฌ์ ๋ฐ๋ผ ์ด๋ํ์ ๋, (x, y) ์์น์ ๋์ฐฉํ๋ ์์ ์์น์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- n, m์ ์ต๋๊ฐ์ 1์ต์ด๊ณ , ์ฟผ๋ฆฌ์ ๊ฐ์๋ 20๋ง์ด๊ธฐ ๋๋ฌธ์ BFS, DFS ๋ฑ์ผ๋ก ๊ตฌํํ๋ฉด ์๊ฐ ์ด๊ณผ or ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋๋ค.
- ์ฒซ ๋ฒ์งธ ํ์ด ํฌ์ธํธ๋ '์ญ๋ฐฉํฅ ํ์'์ด๋ค.
- ๋ชจ๋ ์ธ๋ฑ์ค์์ ์ฟผ๋ฆฌ๋ฅผ ๋๋ ค (x, y)์ ๋์ฐฉํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์๋๋ผ,
(x, y)๋ถํฐ ์์ํด ์ญ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋๋ ค ๋์ฐฉํ๋ ์ธ๋ฑ์ค์ ์๋ฅผ ์นด์ดํธํ๋ฉด ๋๋ค. - ๊ฒฝ์ฐ์ ์๊ฐ ์๋นํ ์ค์ด๋๋๋ฐ, ๋ฒฝ์ ๋ถ๋ํ์ ์์ง์ด์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฃผ์ํด์ผ ํ๋ค.
- ์ญ๋ฐฉํฅ์ผ๋ก ๋ดค์ ๋, ๋ฒฝ์ผ๋ก ๋ถ๋ ๊ฒฝ์ฐ๋ ์ด๋๊ฑฐ๋ฆฌ -1 ๊ฐ๊ฐ ๋์ค๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ชจ๋ ์ธ๋ฑ์ค์์ ์ฟผ๋ฆฌ๋ฅผ ๋๋ ค (x, y)์ ๋์ฐฉํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์๋๋ผ,
- ๋ ๋ฒ์งธ ํ์ด ํฌ์ธํธ๋ '์ ์ด ์๋ ๋ฉด(์ง์ฌ๊ฐํ) ํ์'์ด๋ค.
- ์ธ๋ฑ์ค์ ๋ฒ์๊ฐ 1์ต๊น์ง ๊ฐ๊ธฐ ๋๋ฌธ์, ๋ฒฝ์ผ๋ก ๋ถ๋ ๊ฒฝ์ฐ์ธ '์ด๋๊ฑฐ๋ฆฌ - 1' ๋งํผ ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ฐํ๋ฉด ๊ธ๋ฐฉ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ฒ๋ฆฌ๊ณ ๋ง๋ค.
- ๋ฐ๋ผ์ ์ ํ๋ํ๋ ๊ณ์ฐํ๋ ๊ฒ์ด ์๋๋ผ, ์ต๋ ์ต์๊ฐ์ผ๋ก ๊ณ์ฐํด์ผํ๋ค. ํ๊ณผ ์ด ๋ชจ๋ ์ต๋์ต์๋ฅผ ๊ณ์ฐํด ์ง์ฌ๊ฐํ์ด ์ด๋ํ๊ฑฐ๋ ํฌ๊ธฐ๊ฐ ๋ณํํ๋ ๋ชจ์ต์ ์์ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๐ธ ์ฝ๋ ๐ธ
class Solution {
private final int[] dx = {0, 0, 1, -1}; // ์ญ์ ํ์์ ์ํด ์ฟผ๋ฆฌ์ ๋ฐ๋ ๋ฐฉํฅ
private final int[] dy = {1, -1, 0, 0}; // ์ฐ ์ข ํ ์
public long solution(int n, int m, int x, int y, int[][] queries) {
int sr = x; // ์์ ๋ฒ์ ํ ์ต๋
int er = x; // ์์ ๋ฒ์ ํ ์ต์
int sc = y; // ์์ ๋ฒ์ ์ด ์ต๋
int ec = y; // ์์ ๋ฒ์ ์ด ์ต์
for(int i = queries.length - 1; i >= 0; i--) { // ์ฟผ๋ฆฌ ์ญ์ ํ์
int d = queries[i][0];
int dist = queries[i][1];
// ํ์ด๋ ๊ณ์ฐ
if(d >= 2) {
int[] result = calRange(sr, er, dx[d]*dist, n);
if(result[0] == -1) return 0; // ๋ถ๊ฐ๋ฅ
sr = result[0];
er = result[1];
}
// ์ด์ด๋ ๊ณ์ฐ
else {
int[] result = calRange(sc, ec, dy[d]*dist, m);
if(result[0] == -1) return 0; // ๋ถ๊ฐ๋ฅ
sc = result[0];
ec = result[1];
}
}
return (long)(er-sr+1) * (ec-sc+1);
}
// ๋ฒ์ ๊ณ์ฐ : ํด๋น ๋ฒ์์์ ์ ํ ๋ ๋งํผ ์ด๋ ํ ๋ฒ์
private int[] calRange(int start, int end, int dist, int max) {
// ๋ค์ ๋ฒ์์ ์์๊ณผ ๋์ด ๊ฒฝ๊ณ์ ๊ฑธ์น๋์ง ํ์ธ
int nextS = (start == 0 && dist > 0) ? 0 : start + dist;
int nextE = (end == max-1 && dist < 0) ? max - 1 : end + dist;
// 1) ๋ชจ๋ ๋ฒ์ด๋จ
if((nextS >= max || nextS < 0) && (nextE >= max || nextE < 0))
return new int[] { -1, -1 };
// 2) ์์๋ง ๋ฒ์ด๋จ
else if(nextS < 0 && nextE >= 0 && nextE < max) {
return new int[] { 0, nextE };
}
// 3) ๋๋ง ๋ฒ์ด๋จ
else if(nextE >= max && nextS >= 0 && nextS < max) {
return new int[] { nextS, max - 1 };
}
// ๋ชจ๋ ๊ฐ๋ฅ
else {
return new int[] { nextS, nextE };
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ญ๋ฐฉํฅ ํ์์ ์ํด dx, dy๋ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ ์ฅํด ์ฌ์ฉํ๋ค.
- ํ๊ณผ ์ด์ ์ต๋์ต์ ๋ณ์ sr, er, sc, ec๋ฅผ ์ฌ์ฉํด ์ญ์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์กฐํํด์ ๊ณ์ฐํ๋ค.
- ์ด๋ ๋ฐฉํฅ์ด 1, 2 ์ด๋ฉด, ํ ์ด๋์ด๊ณ , 0, 1์ด๋ฉด, ์ด ์ด๋์ด๋ค.
- ์ผ์ง์ ์์ผ๋ก ์๊ฐํ์๋ ํ ์ด ๋ชจ๋ ์์๊ณผ ๋, ์ด๋ ๊ฑฐ๋ฆฌ, ์ต์ 0๊ณผ ์ต๋ max ๋ผ๋ ์กฐ๊ฑด์ด ๊ฐ์ผ๋ฏ๋ก,
calRange() ๋ฉ์๋๋ฅผ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ค. - ๊ฒฐ๊ณผ๊ฐ -1์ด ๋์ค๋ฉด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ด๋ฏ๋ก 0์ ์ถ๋ ฅํ๋ค.
- ๊ทธ ์ธ์๋ ์ต๋ ์ต์๊ฐ์ ์ ๋ฐ์ดํธ ํ๋ค.
- calRange() ๋ฉ์๋์์๋ ๋ฒ์๋ฅผ ์
๋ฐ์ดํธํ๋ค.
- ๋จผ์ ๋ค์ ์์๊ณผ ๋ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ๋ค. ๋์ ๊ฑธ์ณ์ ธ์ ๋ฒ์๊ฐ ์ปค์ง๋ ๊ฒฝ์ฐ๋ ๋ฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
- ๊ณ์ฐ๋ ๋ค์ ์์ ๋ ์ธ๋ฑ์ค๋ฅผ ๋ค์ ์ ํ ๋ฒ์์ ๋ฐ๋ผ ๋ณ๊ฒฝํด ๋ฐํํ๋ค.
- ์ต์ข ๊ณ์ฐ๋ ํ์ ํฌ๊ธฐ * ์ด์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํด ์ง์ฌ๊ฐํ ๋ฒ์์ ๋ฉด์ ์ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๋์ด๋๊ฐ ์์ฃผ ์ด๋ ค์ ๋ค. ํ์ด์ ์ด 3์๊ฐ ๊ฑธ๋ ธ๊ณ ์ ๋ต ์ฝ๋๊น์ง ๋ณด๊ณ ํผ๊ฑฐ๋ผ ์ํจ๋ค...
- ์ฒซ ๋ฒ์งธ๋ ๋จ์ ์๋ฎฌ๋ ์ด์ ์ด๋ผ๊ณ ์๊ฐํด dfs๋ก ํ์๋ค๊ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ์ผ๋ก ๊ฐ ์ธ๋ฑ์ค์ ์ง๋๊ฐ ์ฟผ๋ฆฌ ๋ช ๋ น์ด ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ฉด ๋ ๊ฒ ๊ฐ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฌ๋ค.
- ๊ฒฐ๊ตญ 1์๊ฐ์ด ์ง๋๊ณ ํํธ๋ฅผ ๋ดค๋๋ฐ, ์ญ์์ผ๋ก ํ์ํ๋ฉด ๊ฒฝ์ฐ์ ์๊ฐ ๋ง์ด ์ค์ด๋๋ ๊ฑธ ์๊ณ ๋ค์ ํ์ด๋ณด์๋ค.
- ํ์ง๋ง ์ ์ผ๋ก ๊ณ์ฐํ์ด์ ์๊ฐ์ด๊ณผ๊ฐ ๋๊ณ , ๊ฒฐ๊ตญ ์ ๋ต ์ฝ๋๋ฅผ ๋ณด์๋ค.
- ์ง์ฌ๊ฐํ ๋ฉด์ ๋ฒ์๋ก ๋ฌธ์ ๋ฅผ ํผ๊ฑด ์ฒ์์ธ ๊ฒ ๊ฐ์์ ๋ง์ ๊ณต๋ถ๊ฐ ๋์๋ค.
- ๋ง์น ํฌํฌ์ธํฐ๊ฐ ์๋๋ผ 4ํฌ์ธํฐ ๋ฌธ์ ๋ผ๊ณ ์๊ฐ๋๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_15989 : 1, 2, 3 ๋ํ๊ธฐ 4 (0) | 2024.08.16 |
---|---|
Lv.3 : ๊ณ ๊ณ ํ ์ต๊ณ ์ ๋ฐ๊ฒฌ (0) | 2024.08.15 |
BOJ_24042 : ํก๋จ๋ณด๋ (0) | 2024.08.01 |
BOJ_25945 : ์ปจํ ์ด๋ ์ฌ๋ฐฐ์น (0) | 2024.06.15 |
BOJ_4179 : ๋ถ! (0) | 2024.06.11 |