Tags
- ๋ฌธ์์ด
- queue
- PGM
- ๋๋น ์ฐ์ ํ์
- Brute Force Algorithm
- SpringBoot
- BFS
- ์๋ฃ๊ตฌ์กฐ
- dfs
- DP
- BOJ
- ๊ตฌํ
- Dynamic Programming
- ๊น์ด ์ฐ์ ํ์
- ์ํ
- sort
- stack
- ์๋ฎฌ๋ ์ด์
- CodingTest
- ๋ฐฑํธ๋ํน
- ๊ต์ฌ
- ์ ์๋ก
- Java
- LV2
- ์ ๋ ฌ
- Study
- ๊ทธ๋ํ ์ด๋ก
- Python
- ๊ทธ๋ํ ํ์
- greedy
Archives
๊ธฐ๋ก๋ฐฉ
Lv.3 : ๊ณ ๊ณ ํ ์ต๊ณ ์ ๋ฐ๊ฒฌ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N*N ํ๋ ฌ์์ ๋ชจ๋ ์นธ์ ์ซ์(์๊ณ)๋ฅผ 0(12์๋ฐฉํฅ)์ผ๋ก ๋ง๋ค์ด์ผ ํ๋ค.
- 0 : 12์, 1 : 3์, 2 : 6์, 3 : 9์
- ํ ์นธ์ ์๊ณ๋ฅผ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆด ์ ์๊ณ , ๋๋ฆฌ๋ฉด ์ํ์ข์ฐ ์ธ์ ํ ์๊ณ๋ ํจ๊ป ๋์๊ฐ๋ค.
- ๋ชจ๋ ์๊ณ๋ฅผ 12์ ๋ฐฉํฅ์ผ๋ก ๋ง๋๋ ์ต์ ์กฐ์ ํ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- ์ฌ๋ฌ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๋ด์ผ ํ๋๋ฐ, BruteForce๋ O(64^4)์ด๋ฏ๋ก ๋๋ฌด ํฌ๋ค.
- Greedy ์ ๊ทผ์ผ๋ก ํ์ดํ ์ ์๋ค.
- ์๊ณ๋ฅผ ์กฐ์ํ๋ ์์๋ ์๊ด ์์ผ๋ฏ๋ก ์์ชฝ์์ ์๋์ชฝ ํ์ผ๋ก ์กฐ์ํ๊ณ ์ ํ๋ค.
- ์ฒซ ํ์ ์ํ๋ง ์์๋ก ์ ํ๋ฉด, ๋ค์ ํ์ ์์ชฝ ํ์ 0์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๋๋ฆฌ๋ฉด ๋๋ค.
- ๋ง์ง๋ง ํ๊น์ง ๋๋ ธ์ ๋ ๋ชจ๋ 0์ธ ๊ฒฝ์ฐ์ ์ต์ ์กฐ์ ํ์๋ฅผ ๊ตฌํ๋ค.
- ์ฒซ ํ๋ง ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๋ณด๋ฉด ๋๋ฏ๋ก O(8^4)๋ก ์ค์ด๋ ๋ค.
๐ธ ์ฝ๋ ๐ธ
class Solution {
private final int[][] dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // ์ ์ฐ ํ ์ข
private int n;
public int solution(int[][] clockHands) {
int min = Integer.MAX_VALUE;
n = clockHands.length;
// Greedy
for(int i = 0; i < (1 << (2*n)); i++) { // ์ฒซ ํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์
int[][] copy = deepCopy(clockHands);
int cnt = 0;
int temp = i;
// ์ฒซ ํ ์กฐ์
for(int col = 0; col < n; col++) { // ์ค๋ฅธ์ชฝ ๋ถํฐ 0~3 ์ผ๋ก ๋๋ ค๋ณด๊ธฐ
int rotateCnt = temp % 4;
temp /= 4;
cnt += rotateCnt;
rotate(copy, 0, col, rotateCnt);
}
// ๋๋จธ์ง ํ ์กฐ์
for(int row = 1; row < n; row++) {
for(int col = 0; col < n; col++) {
int rotateCnt = (4 - copy[row-1][col]) % 4; // ๋ฐ๋ก ์ํ ๊ฐ์ 0์ผ๋ก ๋ง๋๋ ํ์ ์
cnt += rotateCnt;
rotate(copy, row, col, rotateCnt);
}
}
// ๋ง์ง๋ง ํ์ด ๋ชจ๋ 0์ธ์ง ํ์ธ
boolean flag = true;
for(int col = 0; col < n; col++) {
if(copy[n-1][col] != 0) {
flag = false;
break;
}
}
if(flag) min = Math.min(min, cnt);
}
return min;
}
private void rotate(int[][] arr, int row, int col, int rotateCnt) {
arr[row][col] = (arr[row][col] + rotateCnt) % 4; // ํ์ฌ ์ขํ ๋๋ฆผ
for(int[] d : dir) {
int r = row + d[0];
int c = col + d[1];
if( 0 <= r && r < n && 0 <= c && c < n) {
arr[r][c] = (arr[r][c] + rotateCnt) % 4; // 4๋ฐฉ ์ขํ ๋๋ฆผ
}
}
}
private int[][] deepCopy(int[][] arr) {
int[][] copy = new int[n][n];
for(int i = 0; i < n; i++) {
System.arraycopy(arr[i], 0, copy[i], 0, n);
}
return copy;
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ฒซ ํ์ ๊ฒฝ์ฐ์ ์๋ n์นธ์ 0~3 ์ซ์๋ก ์ฑ์ฐ๋ ๊ฒ์ด๋ค.
- 1๋ถํฐ 4^n๊น์ง ํค์๋๊ฐ๋ฉด ๋๋๋ฐ, 1 << (2 * n)์ผ๋ก 4*n์ ํํํ ์ ์๋ค.
- 4 ๋ชจ๋๋ฌ ์ฐ์ฐ์ผ๋ก n ๋ฒ์งธ๋ถํฐ 0๋ฒ์งธ ์นธ์ ์ฑ์ธ ์ ์๋ค.
- ๋ค์ ์นธ์ ์ฑ์ธ ๋๋ 4๋ก ๋๋ ๋ชซ์ ๊ฐ์ผ๋ก ์ ์ฅํด ๋๊ธด๋ค.
- ์ฒซ ํ์ ๊ฐ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๋ณด๊ธฐ ์ํด ์
๋ ฅ ๋ฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ณต์ฌํด์ผ ํ๋ค.
- ๊น์ ๋ณต์ฌ๋ฅผ ์ํํ๋ deepCopy() ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ค.
- ํ ์๊ณ๋ฅผ ๋๋ ธ์ ๋, ์ธ์ ์๊ณ๋ ๋์๊ฐ์ผ ํ๋ฏ๋ก rotate() ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
- ์ฒซ ํ์ ์ ์ธํ ๋๋จธ์ง ํ์ด ๊ฐ๊ฐ ์์ชฝ ํ์ ๊ฐ์ ๋ชจ๋ 0์ผ๋ก ๋ง๋ค๋๋ก ์กฐ์ํ๋ค.
- ๋ง์ง๋ง ํ๊น์ง ๋ชจ๋ 0์ด ๋ ๊ฒฝ์ฐ์์ ์กฐ์ ํ์์ ์ต์๊ฐ์ ๊ธฐ๋กํ๋ค.
๐ธ end ๐ธ
- ์๋นํ ์ด๋ ต๊ฒ ๋ค๊ฐ์จ ๋ฌธ์ ์ด๋ค. ์ฒ์์ ๋ฌธ์ ๋ถ์๊ณผ ํ์ด ์ ๋ต์ ์ ์ด๊ฐ๋ฉฐ ์๊ฐ์ ๋ณด๋๊ณ , ๊ทธ๋ฆฌ๋๋ฅผ ์ ํํ์ง๋ง ๋ฐฉ๋ฒ์ด ํ๋ ค์ ํ ์คํธ1, ํ ์คํธ2๋ฅผ ์ ์ธํ๊ณ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ์๋ค.
/*
< ๋ฌธ์ ์ ๋ฆฌ >
- N*N ํ๋ ฌ์ ์๊ณ๋ค์ด ์ฑ์์์ (N : clockHands์ ๊ธธ์ด)
- ์๊ณ๋ ์ํ์ข์ฐ 4๋ฐฉํฅ (12์๋ถํฐ ์๊ณ๋ฐฉํฅ 0,1,2,3)
- ์ต์ ์กฐ์์ผ๋ก ๋ชจ๋ ๋ฐฉํฅ์ด 0์ด ๋๋๋ก ํ๊ธฐ
< ํ์ด ๊ณํ >
1) ์๊ณ ๋ฆฌ์ฆ
- DFS
- ํ๋ ฌ์ ์ํ ์ ์ฅ์ด ํ์ํ๋ฏ๋ก DFS ์ด๋ค๊ฐ
- ๊ทธ๋ผ ๊น์ด์ ์ต๋๋? -> ๊ฐ๋ ํ ์ ์๋ ๊ฒ ๊ฐ์ผ๋ ํฌ๊ธฐ
- ๊ทธ๋ฆฌ๋**
- ๋๋ ธ์ ๋ 12์๊ฐ ๋๋ ๋ฐ๋์ด ๋ง์ผ๋ฉด +1, ์ฃผ๋ณ์ 0 ๊ฐ์๋ -1
- BFS
- ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก?
- ์ต๋ 64์นธ์ 4๊ฐ์ง ๊ฒฝ์ฐ์์ : 4^64 = ๋๋ฌดํผ
- ์ญ๋ฐฉํฅ ํ์
- ๋ชจ๋ 12์ ์ํ์์ ๊ธฐ์กด ์ํ ๋ง๋ค๊ธฐ
- ์ ๋ชจ๋ฅด๊ฒ ์
- ๊ทธ๋ฆฌ๋ ---- ์ ๋ต ํ์ด 2๊ฐ๋ง๊ณ ๋๋จธ์ง ์๊ฐ์ด๊ณผ ๋์ ํ์ด ๋ด
- >> ์กฐ์ ์์๊ฐ ์ค์ํ์ง ์์ผ๋ฏ๋ก ๊ท์น์ ์ ํด ํ ๋ฐฉํฅ์ผ๋ก ์กฐ์ํ๋ฉด ๋จ <<
- ์์ ์ฒซ ํ์ ์์์กฐ์ํ๊ณ , ๋ค์ ํ์์ ์ ์ค์ด 0์ด ๋๋๋ก ์กฐ์
- ๋ง์ง๋ง ํ๊น์ง ์๋ฃํ์ ๋ ๋ชจ๋ 0์ด ๋๋์ง ํ์ธ
- ์ฒซ ํ์ ๊ฒฝ์ฐ์ ์๋ง ๋ฐ์ง๋ฉด ๋๋ฏ๋ก, ๋ธ๋ฃจํธํฌ์ค 4^64์์ -> ๊ทธ๋ฆฌ๋ 4^8๋ก ์ค์ด๋ฆ
2) ๋ฉ์๋
- ์ผ๋จ ๋๋ฆฌ๋๊ฑด 1ํ๋น ์๊ณ๋ฐฉํฅ 1์นธ
- ์ธ์ ํ ์ธ๋ฑ์ค๋ ํ์ ํ๋ ๊ธฐ๋ฅ ํ์
*/
- ๊ฒฐ๊ตญ ํ์ด ์ ๋ต ํํธ๋ฅผ ๋ดค์ง๋ง, ์ฒซ ํ์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ด๋ป๊ฒ ํด์ผํ ์ง ๋ชฐ๋ผ์ ์ ๋ต ์ฝ๋๊น์ง ๋ณด๊ณ ํด๋ก ์ฝ๋ฉ ํ๋ฏ ํ์ด๋ฅผ ์ ์ถํ๋ค.
- ์ด ๋ฌธ์ ์ ํต์ฌ ํ์ด ์์๋ ์กฐ์ ์์๊ฐ ์๊ด ์์ผ๋ฏ๋ก ํ ๋ฐฉํฅ์ผ๋ก ์ผ์ ํ๊ฒ ๋๋ฆฌ๋ฉด ๋๋ค๋ ๊ฒ์ด๋ค.
- ์ ํ์ด์์๋ ์ฒซ ํ์ ์ํ๋ฅผ ๋ง๋ค ๋ n-1๋ฒ๋ถํฐ 0๋ฒ ์ธ๋ฑ์ค ๊น์ง ๊ฐ์ ์ฑ์๋๊ฐ๋ฉฐ ๋๋ ธ๊ณ ,
๊ทธ ๋ค์์ ํ์ 1~n-1 ๊น์ง ์ด๋ํ๋ฉฐ ๊ฐ์ ์ฑ์ ๋๊ฐ๋ค.
- ์ ํ์ด์์๋ ์ฒซ ํ์ ์ํ๋ฅผ ๋ง๋ค ๋ n-1๋ฒ๋ถํฐ 0๋ฒ ์ธ๋ฑ์ค ๊น์ง ๊ฐ์ ์ฑ์๋๊ฐ๋ฉฐ ๋๋ ธ๊ณ ,
- ์ฒซ ํ์ ์ํ๋ฅผ ๋ง๋ค๋ ๋นํธ ์ฐ์ฐ๊ณผ ๋ชจ๋๋ฌ ์ฐ์ฐ์ ๊ธฐ๊ฐ๋งํ๊ฒ ์ฌ์ฉํ๊ฑธ ๋ณด๊ณ ๊ฐํํ๋ค.
- ์ฌ๋ฌ๋ชจ๋ก ๋ฐฐ์ด๊ฒ ๋ง์ ๋ฌธ์ ์๋ ๊ฒ ๊ฐ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_1113 : ์์์ฅ ๋ง๋ค๊ธฐ (0) | 2024.08.20 |
---|---|
BOJ_15989 : 1, 2, 3 ๋ํ๊ธฐ 4 (0) | 2024.08.16 |
Lv.3 : ๊ณต ์ด๋ ์๋ฎฌ๋ ์ด์ (0) | 2024.08.02 |
BOJ_24042 : ํก๋จ๋ณด๋ (0) | 2024.08.01 |
BOJ_25945 : ์ปจํ ์ด๋ ์ฌ๋ฐฐ์น (0) | 2024.06.15 |