-
Notifications
You must be signed in to change notification settings - Fork 1
29-kokeunho #118
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
29-kokeunho #118
Conversation
kangrae-jo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ถ์ด ๋จผ์ ํผ์ง๊ฒ ํ๋๊ฒ ํต์ฌ์ด์๋ค์.
์๊ฐ์ด ์ข ์๋์ ๊ทผํธ๋ ์ค๋ช
์ด์ง ๋ดค์ต๋๋ค.
๋ฐฉ๋ฒ์ ์๋๊น ๊ตฌํ์์ฒด์ ๋์ด๋๋ ๊ทธ๋ฆฌ๋์ง์์๋๊ฒ ๊ฐ์์.
๊ทผ๋ฐ ์ฒ์์ ์ ์ถํ์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋จ๋๋ผ๊ตฌ์.
๊ทธ๋์ ์ฒ์์ ๋ถ์ ์์น๋ฅผ ์ ์ฅํ๋ ํ๋ ์ ์ญ์์ ์ฌ์ด์ฆ๊ฐ ๋์ด๋์ง์๋๋กํ๊ณ ,
๋ฉ์๋ ๋ด๋ถ์ ๋ฐ๋ก ํ๋ฅผ ๋์ด์ ๋ณต์ฌํ์ฌ ์ฌ์ฉํ๋ค์.
(๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ์ ๋ํ ์์ธํ์
๊ณผ ๋์ฒ๊ฐ ์ ์ ํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค์)
๋ญ๊ฐ ์ 30๋ฒ์จฐ ํผ์์ธ ์น์ฆ๋ฌธ์ ์ ๋น์ทํ๊ตฐ์.
#include <iostream>
#include <queue>
#include <string>
#include <vector>
using namespace std;
const char WALL = '#';
const char PATH = '.';
const char START = 'J';
const char FIRE = 'F';
const int OFFSET[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
int R, C;
pair<int, int> start;
vector<vector<int>> fireTime;
vector<pair<int, int>> fireInit;
bool isIn(int y, int x) { return 0 <= y && y < R && 0 <= x && x < C; }
void diffuse(vector<string>& board) {
fireTime.assign(R, vector<int>(C, 1e9));
queue<pair<int, int>> q;
for (auto [y, x] : fireInit) {
fireTime[y][x] = 0;
q.push({y, x});
}
while (!q.empty()) {
auto [y, x] = q.front();
q.pop();
for (int dir = 0; dir < 4; dir++) {
int y_ = y + OFFSET[dir][0];
int x_ = x + OFFSET[dir][1];
if (isIn(y_, x_) && board[y_][x_] != WALL && fireTime[y_][x_] > fireTime[y][x] + 1) {
fireTime[y_][x_] = fireTime[y][x] + 1;
q.push({y_, x_});
}
}
}
}
int solution(vector<string>& board) {
vector<vector<bool>> visited(R, vector<bool>(C, false));
queue<pair<int, int>> q;
q.push({start.first, start.second});
visited[start.first][start.second] = true;
int time = 0;
while (!q.empty()) {
int size = q.size();
time++;
while (size--) {
auto [y, x] = q.front();
q.pop();
if (y == 0 || y == R - 1 || x == 0 || x == C - 1) return time;
for (int dir = 0; dir < 4; dir++) {
int y_ = y + OFFSET[dir][0];
int x_ = x + OFFSET[dir][1];
if (isIn(y_, x_) && board[y_][x_] == PATH && fireTime[y_][x_] > time && !visited[y_][x_]) {
q.push({y_, x_});
visited[y_][x_] = true;
}
}
}
}
return -1;
}
int main() {
cin >> R >> C;
vector<string> board(R);
for (int y = 0; y < R; y++) {
cin >> board[y];
for (int x = 0; x < C; x++) {
if (board[y][x] == START) start = {y, x};
else if (board[y][x] == FIRE) fireInit.push_back({y, x});
}
}
diffuse(board);
int answer = solution(board);
if (answer == -1) cout << "IMPOSSIBLE\n";
else cout << answer << "\n";
return 0;
}There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ํํ์ธ๊ณ?์ค ๊ฐ์ฅ ๋นจ๋ฆฌ ๋์จ ์งํ์ด์์ด ๋ณด์ฅ๋จ์ผ๋ก ๋ฐ๋ก current[2] + 1 ๊ฐ์ escapeCount๋ก ๋๊ณ returnํด๋ ๋ฉ๋๋ค.
์ฐ์ ์์ํ๊ฐ ์๋์ด๋ ํ๋ ์์๋๋ก ์์ด๋๊น์
wnsmir
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๊ฐ๋ง์ ์๋ฎฌ๋ ์ด์ ๋ฌธ์ ๋ผ ์ฌ๋ฐ๊ฒ ํ๊ณ ์์๋ค๋ง,,,
ํ
๋ถ๋ถํฐ ์์ง์ด๋ฉด.. ์งํ์ด๊ฐ ๊ทธ์๋ฆฌ์์์ผ๋ฉด ํ์ผํ๋๊ฑฐ์๋๋๊น?!
๊ทธ๋์ ๋น์ฐํ ์งํ์ด๋ถํฐ ์์ง์ด๊ฒ ๊ฑฐ๋ ํ๊ณ ๋ฐ๋ก 30๋ถ๋๊ฒ์ฐพ๋ค๊ฐ ๋ฌธ์ ์ง๋ฌธ์ ๋ณด๋
๋ถ์ ์งํ์ด๋ฅผ ์ผํค์ง์์ต๋๋ค!! ๋ผ์๊ธธ๋
ํํํ๊ฒ ๋ถ ์์ง์ด๋ for๋ฌธ ์งํ์ด for๋ฌธ ๋๊ฐ ์๋ฆฌ๋ฐ๊พธ๊ณ passํ์ต๋๋ค..
์ด์๊ฐ ๋นผ๋ฉด ํ 25๋ถ ๊ฑธ๋ฆฐ๊ฒ๊ฐ์ต๋๋ค!
from collections import deque
R, C = map(int, input().split())
maze = [list(input().strip()) for _ in range(R)]
fire_q = deque()
jihun_q = deque()
visited = [[False]*C for _ in range(R)]
for i in range(R):
for j in range(C):
if maze[i][j] == 'J':
jihun_q.append((i, j))
visited[i][j] = True
elif maze[i][j] == 'F':
fire_q.append((i, j))
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
time = 0
while jihun_q:
time += 1
# ๋ถ ํ์ฐ
for _ in range(len(fire_q)):
x, y = fire_q.popleft()
for d in range(4):
nx, ny = x+dx[d], y+dy[d]
if 0 <= nx < R and 0 <= ny < C:
if maze[nx][ny] == '.' or maze[nx][ny] == 'J':
maze[nx][ny] = 'F'
fire_q.append((nx, ny))
# ์งํ์ด ์ด๋
for _ in range(len(jihun_q)):
x, y = jihun_q.popleft()
# ํ์ถ ์กฐ๊ฑด: ๊ฐ์ฅ์๋ฆฌ
if x == 0 or x == R-1 or y == 0 or y == C-1:
print(time)
exit()
for d in range(4):
nx, ny = x+dx[d], y+dy[d]
if 0 <= nx < R and 0 <= ny < C:
if maze[nx][ny] == '.' and not visited[nx][ny]:
visited[nx][ny] = True
jihun_q.append((nx, ny))
print("IMPOSSIBLE")
9kyo-hwang
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ํ ๋ก์ง์ ๋ ผ์คํ์ผ๋ก ์ซ์ซ์ซ ์์ฑํ๋๋ฐ, ์ด๋ฐ์ ๋ฐ์ดํฐ ์ ๋ ฅ๋ฐ๋ ๋ถ๋ถ์์
for(int r = 0; r < R; ++r) {
string mazeRowStr;
cin >> mazeRowStr;
for(int c = 0; c < C; ++C) { // ์๋ฌธ์ c๋ฅผ ์ฌ๋ ค์ผ ํ๋๋ฐ ๋๋ฌธ์ C๋ฅผ ์ฌ๋ฆผ!!
...
}
}์ด ๋๋ฆฌ๊ฐ ๋์ ์๊พธ ์๊ฐ์ด๊ณผ ํฐ์ ธ์ ์ฐพ๋ ๋ฐ 30๋ถ
auto Loop = [&](int& tick) {
for(tick = 0; ; ++tick) {
if(tick == 5) { // ์์ ์ ๊ฑฐ ๋๋ฌธ์ ์๊ฐ์ด๊ณผ ๋์ ๋๋ฒ๊น
์ฉ์ผ๋ก ๋ฃ์ ์กฐ๊ฑด๋ฌธ
break;
}
int moveResult = MoveJihun();
if(moveResult == 1) {
return true;
} else if(moveResult == -1) {
break;
} else {
SpreadFire();
}
}
return false;
};์ ์กฐ๊ฑด๋ฌธ ์ ๊ฑฐ ์ํด์ ํ๋ ธ์ต๋๋ค ๋ ์ ๋ 20๋ถ ๋ ๋ ธ๋ค์ ใ ใ ใ ใ ใ ใ ใ
๋ฌธ์ ์์ฒด๋ ๋
๋ฆฝ์ ์ผ๋ก ์์ง์ด๋ 2๊ฐ์ ๋ฌผ์ฒด์ ๋ํด ๋ณ๋๋ก ํ๋ฅผ ๋์์ํค๋ ๋ฐฉ์์ด์ฃ .
์ ๋ ํ๋์ ๋ฐ๋ณต๋ฌธ ๋ด์์ 1. ์งํ์ด ์์ง์ธ ๋ค 2. ๋ถ์ ํ์ฐ์ํค๋ ๋ฐฉ์์ผ๋ก ์งํํ์ต๋๋ค.
auto Loop = [&](int& tick) {
for(tick = 0; ; ++tick) {
int moveResult = MoveJihun();
if(moveResult == 1) {
return true;
} else if(moveResult == -1) {
break;
} else {
SpreadFire();
}
}
return false;
};
int tick;
if(Loop(tick)) {
cout << tick;
} else {
cout << "IMPOSSIBLE";
}๋ฉ์ธ Loop๋ ์๋์ ๊ฐ์ด ๋์ํฉ๋๋ค.
- ์งํ์ด๋ฅผ ์ด๋์ํด. 1์ด ๋ฐํ๋๋ฉด ํ์ถ ์ฑ๊ณต, -1์ด๋ผ๋ฉด ์คํจ, 0์ด๋ผ๋ฉด ์์ง ๋ฏธ๋ก ์์ ์๋ฏธ
- ์งํ์ด๊ฐ ์์ง ๋ฏธ๋ก ์์ด๋ผ๋ฉด ๋ถ ํ์ฐ์ ์งํ
- Loop์ด true๋ฅผ ๋ฐํํ๋ค๋ฉด ๋ด๋ถ์ ์ผ๋ก ์งํ๋ loop ํ์๋ฅผ ์ถ๋ ฅ, ์๋๋ผ๋ฉด IMPOSSIBLE ์ถ๋ ฅ
auto MoveJihun = [&]() -> int {
if(jihunQ.empty()) {
return -1;
}
for(int repeat = jihunQ.size(); repeat > 0; --repeat) {
const auto [x, y] = jihunQ.front();
jihunQ.pop();
if(OutOfBound(x, y)) {
return 1;
}
if(maze[x][y] == -2) {
continue;
}
for(const auto& [dx, dy] : OFFSET) {
int nx = x + dx, ny = y + dy;
if(!OutOfBound(nx, ny) && maze[nx][ny] == -1) {
maze[nx][ny] = maze[x][y] + 1;
jihunQ.emplace(nx, ny);
} else if(OutOfBound(nx, ny)) {
jihunQ.emplace(nx, ny);
}
}
}
return 0;
};์งํ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์์ง์ ๋๋ค.
- ์งํ์ด Q๊ฐ ๋น์ด์๋ค๋ฉด, ๋ ์ด์ ๋ฏธ๋ก ์์์ ์ด๋ํ ์ ์์ผ๋ฏ๋ก -1์ ๋ฆฌํด
- ์๋๋ผ๋ฉด ์ด๋์ ์ํ, ๋ง์ฝ ํ์ฌ ์นธ์ด ๋ฏธ๋ก ๋ฐ์ด๋ผ๋ฉด ํ์ถ ์ฑ๊ณต์ด๋ฏ๋ก 1 ๋ฆฌํด
- ๋๋ ํ์ฌ ์นธ์ด -2๋ผ๋ฉด ๋ถ์ด ๋๋ฌํ ์นธ์ด ๋์ด ํ์ฌ ํ์ธํ๊ณ ์๋ ์ํ๋ ์ ๊ฑฐ๋์ด์ผ ํ ๋์์ด๋ฏ๋ก continue
- ์งํ์ด๊ฐ ์ด๋ ๊ฐ๋ฅํ ์ํ๋ผ๋ฉด "๋ฏธ๋ก ์์ด๋ฉด์ ๋น ์นธ์ด๋ฉด ์ด๋" ๋๋ "๋ฏธ๋ก ๋ฐ์ด๋ผ๋ฉด ์ด๋"์ ์ํ
- ์ด๋ฒ ํ ๋ฃจํ๋ฅผ ์๋ฃํ๋ค๋ฉด ์์ง ๋ฏธ๋ก ์์์ ์์กด ์ค์ด๋ฏ๋ก 0 ๋ฆฌํด
auto SpreadFire = [&]() -> void {
for(int repeat = fireQ.size(); repeat > 0; --repeat) {
const auto [x, y] = fireQ.front();
fireQ.pop();
for(const auto& [dx, dy] : OFFSET) {
int nx = x + dx, ny = y + dy;
if(OutOfBound(nx, ny) || maze[nx][ny] == -2) {
continue;
}
maze[nx][ny] = -2;
fireQ.emplace(nx, ny);
}
}
};๋ถ ํ์ฐ์ ๊ฐ๋จํฉ๋๋ค. ๋ชป ๊ฐ๋ ์นธ๋ง ์๋๋ผ๋ฉด, ๋ฌด์กฐ๊ฑด ๋ค ๋ถ ์ง์ด๋ฃ์ผ๋ฉด ๋ฉ๋๋ค.
์ ์ฒด ์ฝ๋
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
enum {
WALL = '#',
EMPTY = '.',
JIHUN = 'J',
FIRE = 'F',
};
int R, C;
cin >> R >> C;
queue<pair<int, int>> jihunQ, fireQ;
vector<vector<int>> maze(R, vector<int>(C));
for(int r = 0; r < R; ++r) {
string mazeRowStr;
cin >> mazeRowStr;
for(int c = 0; c < C; ++c) {
switch(mazeRowStr[c]) {
case WALL:
maze[r][c] = -2;
break;
case FIRE:
maze[r][c] = -2;
fireQ.emplace(r, c);
break;
case EMPTY:
maze[r][c] = -1;
break;
case JIHUN:
maze[r][c] = 0;
jihunQ.emplace(r, c);
break;
}
}
}
auto OutOfBound = [R, C](int r, int c) {
return r < 0 || r >= R || c < 0 || c >= C;
};
const vector<pair<int, int>> OFFSET{{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
auto MoveJihun = [&]() -> int {
if(jihunQ.empty()) {
return -1;
}
for(int repeat = jihunQ.size(); repeat > 0; --repeat) {
const auto [x, y] = jihunQ.front();
jihunQ.pop();
if(OutOfBound(x, y)) {
return 1;
}
if(maze[x][y] == -2) {
continue;
}
for(const auto& [dx, dy] : OFFSET) {
int nx = x + dx, ny = y + dy;
if(!OutOfBound(nx, ny) && maze[nx][ny] == -1) {
maze[nx][ny] = maze[x][y] + 1;
jihunQ.emplace(nx, ny);
} else if(OutOfBound(nx, ny)) {
jihunQ.emplace(nx, ny);
}
}
}
return 0;
};
auto SpreadFire = [&]() -> void {
for(int repeat = fireQ.size(); repeat > 0; --repeat) {
const auto [x, y] = fireQ.front();
fireQ.pop();
for(const auto& [dx, dy] : OFFSET) {
int nx = x + dx, ny = y + dy;
if(OutOfBound(nx, ny) || maze[nx][ny] == -2) {
continue;
}
maze[nx][ny] = -2;
fireQ.emplace(nx, ny);
}
}
};
auto Loop = [&](int& tick) {
for(tick = 0; ; ++tick) {
int moveResult = MoveJihun();
if(moveResult == 1) {
return true;
} else if(moveResult == -1) {
break;
} else {
SpreadFire();
}
}
return false;
};
int tick;
if(Loop(tick)) {
cout << tick;
} else {
cout << "IMPOSSIBLE";
}
return 0;
}
g0rnn
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ฌธ์ ๊ฐ ์ข ๋ถ์น์ ํ๋ค์.. ๋ถ์ด ์ฌ๋ฌ ๊ฐ์ผ ์ ์๋ค๋ ๊ฐ์ ๋ ์๊ณ (๋ด๊ฐ ํ๊ฐ๋ผ๊ณ ์๊ฐํ๊ฒ ์ด์ํ๊ฑด๊ฐ), ์นด์ดํธ๊ฐ 1๋ถํฐ ์์ํ๋ค๋ ์๊ธฐ๋ ์๋ค์ฉ..
์ ๋ while๋ฌธ ๋ด์์ fire์ ํ์ ์งํ์ด์ ์์น๋ฅผ ๋ด์ ํ๋ฅผ ๋์์ ๋๋ ธ์ต๋๋ค. ๊ฐ๊ฐ์ size๋ฅผ ๊ธฐ๋ฐ์ผ๋ก while๋ฌธ์ ๋๋ ค์ ์์์ธ๋ก ๊ฒน์น ์ผ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์งํ์ด๊ฐ ๋จผ์ ์์ง์ธ๋ค๋ฉด ๋ถ๊ณผ ๋ง๋ฅ๋ค์ผ ์ ์์ผ๋ฏ๋ก ๋ถ์ด ๋จผ์ ์์ง์ฌ์ผํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์๊ฐ์ ์ธ๋ ์นด์ดํธ๊ฐ 1๋ถํฐ ์์ํ๊ณ , isEdge๋ก ๊ฐ์ฅ์๋ฆฌ๋ฅผ ํ๋ณํ๋ ์์๊ฐ ๊ผฌ์ฌ์ 10๋ถ์ ๋ ์ํด๋ฅผ ๋ดค๋ค์; ๊ทธ๋๋ ๊ณจ๋ 3 bfs๋ฌธ์ ๋ ์์ฝ๊ฒ ํ๋ฆฌ๋ ์ง๊ฒฝ์ ๋๋ฌํ๋ค์
๊ณ ์ํ์ จ์๋๋ค~~
package beakjoon;
import java.util.*;
import java.io.*;
public class Sol4179 {
static final char WALL = '#';
static int r, c, answer=1;
static char[][] board;
static int[] J = new int[2];
static List<int[]> fireStarts = new ArrayList<>();
static int[][] offset = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
board = new char[r][c];
for (int i = 0; i < r; i++) {
board[i] = br.readLine().toCharArray();
for (int j = 0; j < c; j++) {
if (board[i][j] == 'J') {
J[0] = j; // x
J[1] = i;
} else if (board[i][j] == 'F') {
fireStarts.add(new int[]{j, i});
}
}
}
br.close();
if (bfs()) {
System.out.println(answer);
} else {
System.out.println("IMPOSSIBLE");
}
}
private static boolean bfs() {
Queue<int[]> jihoon = new ArrayDeque<>();
Queue<int[]> fire = new ArrayDeque<>();
boolean[][] jVisited = new boolean[r][c];
boolean[][] fVisited = new boolean[r][c];
if (isEdge(J[0], J[1])) return true;
jihoon.offer(new int[]{J[0], J[1]});
jVisited[J[1]][J[0]] = true;
// ๋ถ ์์์์น ์ง์
for (int[] f : fireStarts) {
fire.offer(f);
fVisited[f[1]][f[0]] = true;
}
while (!jihoon.isEmpty()) {
int jSize = jihoon.size();
int fSize = fire.size();
while (fSize-- > 0) {
int x = fire.peek()[0];
int y = fire.poll()[1];
for (int[] o : offset) {
int nx = x + o[0];
int ny = y + o[1];
if (nx < 0 || nx >= c || ny < 0 || ny >= r) {
continue;
}
if (fVisited[ny][nx] || board[ny][nx] == WALL) {
continue;
}
fire.offer(new int[]{nx, ny});
fVisited[ny][nx] = true;
board[ny][nx] = 'F';
}
}
while (jSize-- > 0) {
int x = jihoon.peek()[0];
int y = jihoon.poll()[1];
if (isEdge(x, y)) {
return true;
}
for (int[] o : offset) {
int nx = x + o[0];
int ny = y + o[1];
if (nx < 0 || nx >= c || ny < 0 || ny >= r) {
continue;
}
if (jVisited[ny][nx] || board[ny][nx] == WALL || board[ny][nx] == 'F') {
continue;
}
jihoon.offer(new int[]{nx, ny});
jVisited[ny][nx] = true;
}
}
answer++;
}
return false;
}
private static boolean isEdge(int x, int y) {
return x == 0 || y == 0 || x == (c-1) || y == (r-1);
}
}
๐ ๋ฌธ์ ๋งํฌ
[BOJ] ๋ถ! https://www.acmicpc.net/problem/4179
โ๏ธ ์์๋ ์๊ฐ
1h 25min
โจ ์๋ ์ฝ๋
์ฐ์ ๋ถ์ด ๋ ์ ์๋ ๊ฐ ์ง์ ์์ bfs๋ฅผ ์ฌ์ฉํด์
๋ถ์ด ํผ์ง ์ ์๋ ๊ฒฝ๋ก์ ์ง์ ๋ง๋ค ๋ช ๋ถ๋ง์ ๋ถ์ด ์ฎ๊ฒจ๋ถ์ ์ ์๋์ง ํ์ํด๋์์ต๋๋ค.
(๋ถ์ด ์ฌ๋ฌ ์ง์ ์์ ๋ฐ์ํ ์ ์๋ค๋ ๊ฒ์ ์ ์ฉํ์ง ์์๋ค๊ฐ ์๊ฐ์ ์ข ๋ฒ๋ ธ์ต๋๋ค.)
๊ทธ๋ฆฌ๊ณ ์งํ์ด๋ bfs๋ก ํ์ถ์ ์๋ํฉ๋๋ค.
์งํ์ด๊ฐ ๋ค์ ์ง์ ์ ์ด๋ํ ๋, ๊ฑธ๋ฆฐ ์๊ฐ๊ณผ ํด๋น ์ง์ ์ ๋ถ์ด ์ฎ๊ฒจ ๋ถ์ ์๊ฐ์ ๋น๊ตํ์ฌ
๋ถ์ด ์ฎ๊ฒจ ๋ถ๋ ์๊ฐ๋ณด๋ค ๋ ๋น ๋ฅด๋ค๋ฉด ํด๋น ์ง์ ์ผ๋ก ์์ง์ ๋๋ค.
๋ฏธ๋ก๋ฅผ ๋ฒ์ด๋ ๋๋ง๋ค ์๊ฐ์ ์ฒดํฌํด์ ํ์ถ ์ต๋จ ์๊ฐ์ ๊ตฌํฉ๋๋ค.
๐ ์๋กญ๊ฒ ์๊ฒ๋ ๋ด์ฉ