https://www.acmicpc.net/problem/9328
π μλ°λ‘ νΈλ μ΄μ λ¬Έμ νμ΄ (λ°±μ€ 9328)
π λ¬Έμ κ°μ
κ°μ₯μ νλ©΄λκ° μ£Όμ΄μ‘μ λ, μνμ’μ° μ΄λμ ν΅ν΄ κ°λ₯ν λ§μ λ¬Έμ(’$’)λ₯Ό μ»λ κ²μ΄ λͺ©νμ λλ€.
- λ²½μ *, λΉ κ³΅κ°μ ., λ¬Έμ A~Z, μ΄μ λ a~z, λ¬Έμλ $
- μ΄μ κ° μμ΄μΌ λ¬Έμ ν΅κ³Όν μ μμ
- μ΄μ λ ν λ² νλνλ©΄ ν΄λΉ μ’ λ₯μ λ¬Έμ λͺ¨λ μ΄ μ μμ
- κ°μ₯μ μΈκ³½ μ΄λ μ§μ μμλ μΉ¨μ κ°λ₯
π‘ μμ μ λ ₯
1
5 17
*****************
.............**$*
*B*A*P*C**X*Y*.X.
*y*x*a*p**$*$**$*
*****************
cz
μμ μΆλ ₯
3
π§ μκ³ λ¦¬μ¦ μ κ·Ό λ°©μ
μ΄ λ¬Έμ λ BFS(λλΉ μ°μ νμ) μ κΈ°λ°μΌλ‘ ν μ μμΌλ©°, μ΄μ λ₯Ό νλν λλ§λ€ μλ‘κ² μ΄λ¦¬λ λ¬Έλ€μ λ€μ νμΈν΄μΌ νλ―λ‘ μΆκ°μ μΈ μν κ΄λ¦¬κ° νμν©λλ€.
π μ 체 μ½λ (BFS κΈ°λ°)
// μ½λ μ 체λ μλ΅ μμ΄ μ λ³Έλ¬Έ μ°Έκ³
// ν΅μ¬ ν¨μ: check(), BFS(), main(), logic()
μ 체 μ½λλ μ μ§λ¬Έ λ³Έλ¬Έμ ν¬ν¨λμ΄ μμΌλ©°, ν΅μ¬ λ‘μ§μ check() ν¨μμ λλ€.
π§Ύ ν΅μ¬ λ‘μ§ μ€λͺ
1. μμμ μ²λ¦¬: μΈκ³½ νμ
for (int i = 0; i < width; i++) {
check(0, i, hasKey, 0);
check(height-1, i, hasKey, 0);
}
for (int i = 0; i < height; i++) {
check(i, 0, hasKey, 0);
check(i, width-1, hasKey, 0);
}
→ μΈκ³½μμ μ§μ κ°λ₯ν λͺ¨λ μ μ check()λ‘ μ§μ μλ
2. μ΄μ λ₯Ό λ¨ΉμΌλ©΄ μ μ₯λ λ¬Έλ€ κ°λ°©
else if(map[x][y] >= 'a' && map[x][y] <= 'z'){
hasKey[map[x][y]-'a'] = true;
...
for (Node cur : savedDoor.get(map[x][y])) {
q.add(cur);
isVisited[cur.x][cur.y] = true;
}
}
→ μ΄μ νλ μ, savedDoorμ μ μ₯λμ΄ μλ λμ λ¬Έμ λͺ¨λ νμ μ¬μΆκ°
3. λ¬Έμ λ§λλ©΄ μ΄μ μ 무μ λ°λΌ μ²λ¦¬
else if(map[x][y] >= 'A' && map[x][y] <= 'Z'){
if(hasKey[map[x][y]-'A']) {
map[x][y] = '.';
isVisited[x][y] = true;
} else {
savedDoor.get(Character.toLowerCase(map[x][y])).add(new Node(x,y));
return;
}
}
→ μ΄μ μμΌλ©΄ μ μ₯λ§ ν΄λκ³ λμ€μ λ€μ λ°©λ¬Έ
βοΈ μ§μ κ²ͺμ μ€μ μ 리
1. '.' μΉΈμ isVisited = true λ₯Ό λλ½
else if(map[x][y] == '.'){
isVisited[x][y] = true; // β
λ°λμ λ°©λ¬Έ μ²λ¦¬ νμ!
}
→ λ°©λ¬Έ μ²λ¦¬ μ ν΄μ€μ κ°μ μΉΈμ stack over flow λ°μ
2. λλ¬Έμ λ¬Έμμ hasKey μλͺ» μ‘°ν
// β μλͺ»λ λ²μ
hasKey[map[x][y] - 'a'] // λλ¬Έμμ λν΄ 'a' κΈ°μ€ μΈλ±μ±νλ©΄ IndexOutOfBounds or null λ°μ
// β
μ¬λ°λ₯Έ λ²μ
hasKey[map[x][y] - 'A']
→ μ΄μ λ°°μ΄μ a~z κΈ°μ€ 26μΉΈ. λλ¬Έμμ λν΄μ λ°λμ 'A'λ‘ λ³νν΄μΌ ν¨
β ν΅μ¬ ν¬μΈνΈ μ 리
ν¬μΈνΈ | μ€λͺ |
μΈκ³½ μ§μ | κ°μ₯μ리λ₯Ό ν΅ν΄ BFS μμ |
μ΄μ νλ μ λ¬Έ κ°λ°© | HashMap<Character, List>λ‘ λ¬Έ μ μ₯ |
λ°©λ¬Έ μ²΄ν¬ | isVisited[][]λ ., λ¬Έμ, λ¬Έ ν¬ν¨ λͺ¨λ μ ν¨ μΉΈμ νμ |
μ΄μ μΈλ±μ± | νμ 'a', 'A' κΈ°μ€ μΈλ±μ€ κ΅¬λΆ μ² μ ν |
π― κ²°λ‘ : BFS + μν μ μ₯μ΄ κ³§ μ΄μ λ€
μ΄ λ¬Έμ λ λ¨μν νμμ΄ μλλΌ, μν λ³ν(μ΄μ νλ)μ λ°λΌ μ΄λ κ°λ₯μ±μ΄ νμ₯λλ λ¬Έμ μ λλ€.
ν λ² μ΄μ λ₯Ό μ»μΌλ©΄, κ³Όκ±°μ λͺ» κ°λ λ¬Έμ λμκ°μΌ νλ€λ μ μμ μν κΈ°λ° BFS μ€κ³κ° μ€μν©λλ€.
μ΄λ―Έ λ°©λ¬Ένμ§λ§ μ΄μ§λͺ»νλ λ¬Έμ μμΉλ₯Ό μνλ²³ κΈ°μ€μΌλ‘ mapμ μ 리νμ¬ μ μ₯ν΄λκ³ μ΄μ λ°κ²¬ μ
κ·Έ λ¬Έμ μμΉλ₯Ό queueμ λ£μ΄μ€μΌλ‘μ¨ νμμ λμκ° μ μκ² μ€κ³νλ λ°©μμ΄ μ λ§ μ μ νμ μλκ² κ°μ΅λλ€.
'Algorithm & Data Structures > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
b2644. μ΄μκ³μ° (0) | 2025.05.31 |
---|---|
b1068. νΈλ¦¬ (0) | 2025.05.31 |
b10942. ν λ¦°λ둬? (0) | 2025.05.20 |
b1655. κ°μ΄λ°λ₯Ό λ§ν΄μ (0) | 2025.05.19 |
b1774. μ°μ£Όμ κ³Όμ κ΅κ° (0) | 2025.05.14 |