λ¬ν½μ΄ μ΄λμ ν¨μ¨μ μΌλ‘ μμ±ν μ½λκ° μμ΄μ κΈ°λ‘νλ€.
μ°μ 격μμ ν λ³μ 무쑰건 νμλ€.
μ -> λ°μΌλ‘ μ΄λνλ λ°©ν₯κ³Ό λ° -> μμΌλ‘ μ΄λνλ λ°©ν₯μ ν λ²μ μ μ₯νλ λ‘μ§μ΄λ€.
κ·μΉ μ°ΎκΈ°
λ¬ν½μ΄ μ΄λνλ κ·μΉμ μ°Ύμ보면 νμ¬ λ°©ν₯μ΄ λ§μ½ μ λλ μλμΌ λλ§λ€ μ΄λνλ νμκ° 1μ© μ¦κ°νλ€.
μ β λ°μΌλ‘ μ΄λνλ κ²½μ°λ₯Ό 보면,
β¬οΈ β‘οΈ λ‘ μ΄λν λλ 1, 3, 5 ... μΉΈμ© μ΄λνκ³ ,
β¬οΈ β¬ οΈ λ‘ μ΄λν λλ 2, 4, 6 ... μΉΈμ© μ΄λνλ€.
(0, 0)μΉΈμΌλ‘ ν₯ν΄ κ°λ λ§μ§λ§ β¬οΈλ μ§μ μΉΈλ§νΌ μ΄λνμ§λ§ μ΄μ°¨νΌ (0, 0)μμ λλκΈ° λλ¬Έμ breakνλ©΄ λλ€.
λ° β μμΌλ‘ μ΄λνλ λ¬ν½μ΄ λͺ¨μμ μμ λ°λλ‘ μκ°νλ©΄ λκΈ° λλ¬Έμ λ°©ν₯λ§ λ°κΏμ£Όλ©΄ λλ€.
μ½λ
public static void getSnailDir() {
// μμ°νμ’ μμλλ‘ λ£κΈ°
int[] dx = {-1, 0, 1, 0};
int[] dy = {0 , 1, 0, -1};
// μμ μμΉμ λ°©ν₯,
// ν΄λΉ λ°©ν₯μΌλ‘ μ΄λν νμ μ€μ
int currX = n / 2, currY = n / 2; // nμ νμ
int moveDir = 0, moveNum = 1;
while(currX > 0 || currY > 0) {
// moveNum λ§νΌ μ΄λ
for(int i = 0; i < moveNum; i++) {
// μ -> λ°μΌλ‘ μ΄λνλ λ¬ν½μ΄
inToOutDir[currX][currY] = moveDir;
currX += dx[moveDir]; currY += dy[moveDir];
// λ° -> μμΌλ‘ μ΄λνλ λ¬ν½μ΄ ==> μ΄λλ°©ν₯λ§ μμ λ°λλ‘ νλ©΄ λλ€ !
outToInDir[currX][currY] = (moveDir < 2) ? (moveDir + 2) : (moveDir - 2);
// μ΄λνλ λμ€ (0, 0)μΌλ‘ μ€κ² λλ©΄,
// μμ§μ΄λ κ²μ μ’
λ£
if(currX == 0 && currY == 0)
break;
}
// λ°©ν₯μ λ°κΏλλ€.
moveDir = (moveDir + 1) % 4;
// λ§μ½ νμ¬ λ°©ν₯μ΄ μ νΉμ μλκ° λ κ²½μ°μλ
// νΉμ λ°©ν₯μΌλ‘ μμ§μ¬μΌ ν νμ 1 μ¦κ°
if(moveDir == 0 || moveDir == 2)
moveNum++;
}
}
'μκ³ λ¦¬μ¦ > ποΈ μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
πΊ λ²μλ₯Ό λ²μ΄λ κ²½μ° λ°λλ°©ν₯μΌλ‘ μ΄λνλ μκ³ λ¦¬μ¦ πΊ (0) | 2024.04.09 |
---|---|
LCS (μ΅μ₯ κ³΅ν΅ λΆλΆ μμ΄) (0) | 2024.03.11 |
Topological Sort (μμμ λ ¬) (1) | 2024.02.27 |
Simulation - 2μ°¨μ λ¬ν½μ΄ λ°°μ΄ π (0) | 2024.02.08 |
DP - Knapsack (λ°°λλ¬Έμ ) (1) | 2024.02.05 |