-
Notifications
You must be signed in to change notification settings - Fork 2
21-flydongwoo #82
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
21-flydongwoo #82
Conversation
Seol-Munhyeok
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.
μκ°ν΄λ³Όκ² λ§μ BFS λ¬Έμ λ€μ... μ λ λ§€λ² 1λ‘ μ±μλκ°λ©΄μ κ° BFSμ νμ λ 벨λ§λ€ μ§κΈ ν λ§ν κ° λ€ μ΅μλμ§ νλ¨νλ λ°©μμΌλ‘ νμλλ° Python3λ μκ°μ΄κ³Όλ₯Ό λ°κ³ , PyPyλ‘ ν΄μ ν΅κ³Όλ₯Ό λ°μμ΅λλ€.
μκ°μ΄κ³Όμ μμΈμ λ§€λ² λͺ¨λ λ°°μ΄μ μννλ©° λͺ¨λ ν λ§ν κ° λ€ μ΅μλμ§ μ²΄ν¬νλ κ²μ λ무 μμ£Ό λ°λ³΅ν΄μμμ΅λλ€. ν¨μ¨μ μΈ νμ΄λ λμ° λμ²λΌ νλ²μ BFSλ‘ λͺ¨λ λ°°μ΄μ λ€ κΈ°λ‘νκ³ , λ± νλ²λ§ μ 체λ₯Ό μνν΄μ μ λ΅μ μ°Ύλ κ²μ λλ€.
μ¬λ¬ μμμ BFS λ¬Έμ λΌλ μ νμ μλ‘κ² μκ²λμμ΅λλ€.
BFS λ¨κ³λ§λ€ λ 벨μ κΈ°λ‘ν λ, λ°°μ΄μ μ΄μ μ μλ κ° + 1μ κΈ°λ‘νλ λ°©μμΌλ‘ μ²λ¦¬νλ λΆλΆλ κΈ°μ΅νκ³ κ°λλ€.
μκ³ νμ
¨μ΅λλ€.
[νμ΄ 1] http://boj.kr/29316c1257b94a7fa1635ea9e1df4579
[νμ΄ 2] http://boj.kr/9083d6d8e0324dfba676cec7574cba63
|
BFSμ μ€ν λμ λ¬ κ°μ λ¬Έμ λ€μ. BFSλ₯Ό μ§νμν€λ, λ μ§λΌλ κ°λ μ΄ μ€μνκ² μμ©νκΈ° λλ¬Έμ νμ κΈΈμ΄λ₯Ό 미리 μ¬ μ€ λ€μ, νμ κΈΈμ΄λ§νΌ μ μ΄λ₯Ό μ§ννκ³ λ μ§λ₯Ό +1ν΄μ£Όλ λ‘μ§μ μ¬μ©νμ΅λλ€. 맨 λ§μ§λ§μλ μ 체 λ°°μ΄μ νλ² νμ΄λ³΄λ©΄μ 0μ΄ μλμ§ νμΈ ν, μλ€λ©΄ -1μ μΆλ ₯ν΄μ£Όμμ΅λλ€. μ μΆ μ½λμ λλ€. κ³ μνμ ¨μ΄μ! ν λ§ν / c++#include <bits/stdc++.h>
using namespace std;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int n, m;
vector<vector<int>> arr;
queue<pair<int, int>> Q;
int main()
{
//freopen("test.txt", "rt", stdin);
cin >> m >> n;
int tmp;
arr.resize(n, vector<int>(m));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> tmp;
arr[i][j] = tmp;
if (tmp == 1)
{
Q.push({i, j});
}
}
}
int day = -1;
while (!Q.empty())
{
int qlength = Q.size();
while (qlength--)
{
pair<int, int> cur = Q.front();
Q.pop();
for(int i = 0; i < 4; i++)
{
int nx = cur.first + dx[i];
int ny = cur.second + dy[i];
if(nx < 0 || ny < 0 || nx >= n || ny >= m || arr[nx][ny] != 0)
{
continue;
}
arr[nx][ny] = 1;
Q.push({nx,ny});
}
}
day++;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if(arr[i][j] == 0)
{
cout << -1;
return 0;
}
}
}
cout << day;
}
|
|
μ λ μ΅νμΌ νλ ν λ§ν μ΄ μλ₯Ό 미리ꡬνκ³ , λ μ§λΌλ κ°λ
μ΄ μκΈ°μ μλ‘μ΄ νλ₯Ό λ§λ€μ΄ μλ‘κ² μ΅ν ν λ§ν λ₯Ό pushνκ³ νμμ΄ λλ ν μλ‘μ΄ νλ₯Ό μλ νμ λμ
νλ λ°©μμ μ¬μ©νμ΅λλ€. νλΉλμ²λΌ νμ κΈΈμ΄λ₯Ό ν΅ν΄μ μ‘°μ νλ λ°©λ²λ μ’μ κ² κ°μ΅λλ€. ν λ§ν#include <bits/stdc++.h>
using namespace std;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
int main() {
// freopen("input.txt", "rt", stdin);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m; cin >> m >> n;
vector<vector<int>> v(n, vector<int> (m));
queue<pair<int, int>> q;
int ripe = 0; // μ΅μ ν λ§ν μ
int empty = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
int a; cin >> a;
if(a == 1) {
ripe++;
q.push({i, j});
}
if(a == -1) empty++;
v[i][j] = a;
}
}
int total = n * m - empty;
if(ripe == total) {
cout << 0;
return 0;
}
int res = 0;
int sum = 0;
while(1) {
queue<pair<int, int>> tq;
res += 1;
while(!q.empty()) {
auto tp = q.front(); q.pop();
for(int d = 0; d < 4; d++) {
int xx = tp.first + dx[d];
int yy = tp.second + dy[d];
if(xx >= 0 && xx < n && yy >=0 && yy < m && v[xx][yy] == 0) {
ripe++;
v[xx][yy] = 1;
tq.push({xx, yy});
}
}
}
if(ripe == total) break;
if(tq.empty()) break;
q = tq;
}
if(ripe != total) res = -1;
cout << res;
return 0;
}
|
π λ¬Έμ λ§ν¬
https://www.acmicpc.net/problem/7576
βοΈ μμλ μκ°
30λΆ
β¨ μλ μ½λ
μ΄λ² λ¬Έμ λ μκ³Ό λ€κ° λ€λ₯Έ μ¬λμ΄ λ§μ μ΄μ§λ¬μ΄ νλμ¬νμ **'μμΌλ‘ ν΄λ, λ€λ‘ ν΄λ κ°μ ν λ§ν κ°μ μ¬λ'**μ΄ λμ!
λΌλ λ§μμΌλ‘ ν λ§ν λ¬Έμ κ°μ Έμμ΅λλ€.. λ€...
μ κ° μκ°νλ μ΄ ν λ§ν λ¬Έμ μ ν¬μΈνΈλ ν λ§ν κ° μ΅μ μν(1)μ μ’νλ₯Ό ν λ§ν μ 보λ₯Ό μ λ ₯λ°μλ queueμ μ μ₯νλ κ²μ μλ κ²μ΄λΌκ³ μκ°ν©λλ€. μ¦, queueμ λ΄κΈ΄ μ΅μ ν λ§ν (1)λ₯Ό μμμ μΌλ‘ ν΄μ BFSλ₯Ό λλ €μΌνμ£ .
μ°μ , μ°½κ³ ν¬κΈ° m(μ΄), n(ν)μ μ λ ₯λ°μ΅λλ€.
n Γ m 격μλ₯Ό ν μΉΈμ© μ½μ΄ graph[i][j]μ μ μ₯νλλ°, μ½λ λμ, κ°μ΄ 1(μ΅μ ν λ§ν ) μΈ μΉΈ (i, j)λ ν qμ μ¦μ λ£μ΅λλ€.
-> μ΄λ κ² νλ©΄ "λ€μ€ μμμ "μ΄ BFSκ° λ©λλ€.
μ΄μ , BFSλ₯Ό νλλ° ν μμμ μ’ν (y, x)λ₯Ό κΊΌλ΄λλ°, 4λ°©ν₯ μ΄μ (ny, nx)μ λν΄, λ²μ μμ΄κ³ , κ·Έ μΉΈμ΄ 0(μ μ΅μ) μ΄λ©΄, graph[ny][nx] = graph[y][x] + 1λ‘ λ μ§λ₯Ό 1 λλ € κΈ°λ‘νκ³ , μ΄ μ’ν (ny, nx)λ₯Ό νμ λ£μ΄ λ€μ μ ν λμμΌλ‘ λ§λλλ€.
κ·Έλ¬λ―λ‘, μ²μ 1μ΄μλ μΉΈλ€μ 1, ν루 λ€ μ νλ μΉΈμ 2, κ·Έ λ€μμ 3 β¦ μ²λΌ κ°μ΄ βλ μ§βλ‘ λμ λλ κ²μ΄μ£ .
κ·Έ λ€μμΌλ‘, νμ μ νλλ° κ²©μλ₯Ό λ€μ μ λΆ μνν΄μ λ§μ½ κ°μ΄ 0μΈ μΉΈμ΄ νλλΌλ λ¨μ μμΌλ©΄ μ΅νμ§ λͺ»ν ν λ§ν κ° μ‘΄μ¬νλ κ²μ΄λ―λ‘ -1μ μΆλ ₯νκ³ μ’ λ£ν©λλ€. κ·Έ μΈμλ λͺ¨λ μΉΈμ κ° μ€ μ΅λκ°μ resultμ μ μ₯ν©λλ€.
λ§μ§λ§μΌλ‘, μ΄κΈ° μ΅μ μΉΈμ κ°μ΄ 1λΆν° μμνλ―λ‘, μ΄ μμ μΌμλ resultμμ 1μ λΉΌμ€μΌνμ£ .
μμ 3λ²μ μ κ° κ·Έλ¦ΌμΌλ‘ κ²μ¦ν΄λ³΄λ©΄
μ΄κ²μ BFS νμμ΄ μμλλ μ§μ μ λλ€. μ΄λ‘μμ΄ μμμ μ΄μ£ .
μ΄κ²μ BFS νμμ΄ λλλ μ§μ μ λλ€. μ£Όν©μμ΄ λμ°©μ μ΄μ£ .
κ·Έλ¬λ―λ‘ μ΅λκ°μ΄ 7μ΄ λκ³ μ λ΅μ 7μμ 1μ λΊ 6μ΄ λλ κ²μ λλ€.
μ΄μ μ½λ λ¨κΈ°κ³ μ΄λ§ μ¬λΌμ§κ² μ΅λλ€ μ’μ μ£Όλ§λμΈμ μ΄μ΄
π μλ‘κ² μκ²λ λ΄μ©
queueλ FIFO ꡬ쑰λ₯Ό κ°μ§κ³ μμμ μΌλν΄λκ³ κ·Έλ¦Όμ κ·Έλ €κ°λ©° μκ°νλ©΄ μ΄ν΄νκΈ° μ½λ€λ κ²μ λκΌμ΅λλ€.