๐Algorithm/๐ฅBaekjoon
[Baekjoon] 13986_Gravity
๋ฟ์ผ._.
2025. 5. 30. 16:27
๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/13986)
< Gravity >
๋ฌธ์ ํ์ด
'o' ์์น์์ ์๋๋ก ํ์ํ๋ฉฐ ๋น์นธ์ธ ๊ณณ์ผ๋ก ์ด๋ํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;
public class _13986_ { // Gravity
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bf.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
char[][] arr = new char[n][m];
Stack<int[]> stack = new Stack<>();
for (int i = 0; i < n; i++) {
String str = bf.readLine();
for (int j = 0; j < m; j++) {
arr[i][j] = str.charAt(j);
if (arr[i][j] == 'o') {
stack.add(new int[] { i, j });
}
}
}
while (!stack.isEmpty()) {
int position[] = stack.pop();
int result = position[0];
for (int i = position[0] + 1; i < n; i++) {
if (arr[i][position[1]] == '.') {
result = i;
} else {
break;
}
}
arr[position[0]][position[1]] = '.';
arr[result][position[1]] = 'o';
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
bw.write(arr[i][j]);
}
bw.write("\n");
}
bw.flush();
}Add commentMore actions
}
๋ณ์)
n, m : ๋ฐฐ์ด ํฌ๊ธฐ
arr : ๊ทธ๋ฆฌ๋
stack : ์ฌ๊ณผ ์์น
position : ํ์ฌ ์ฌ๊ณผ ์์น
result : ์ด๋ ์์น
ํ, ์ด์ ์ ๋ ฅ๋ฐ๋๋ค. ํ, ์ด ํฌ๊ธฐ๋งํผ ๊ทธ๋ฆฌ๋ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ arr์ ์ ์ฅํ๋ฉด์ ์ฌ๊ณผ๊ฐ ์๋ ์์น๋ผ๋ฉด stack์๋ ์ ์ฅํ๋ค. stack์ด ๋น ๋๊น์ง ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) stack pop
2) ํ์ฌ ์์น์์ ์๋๋ก ํ์ํ๋ฉด์ ๋น์ด์๋ค๋ฉด result ๊ฐ ์ ๋ฐ์ดํธ, ๋น์ด์์ง ์๋ค๋ฉด ๋ ์ด์ ์ด๋ํ ์ ์์ผ๋ฏ๋ก ์ข ๋ฃ
3) ํ์ฌ ์์น๋ฅผ ๋น์นธ์ผ๋ก ์ ์ฅ, ์ด๋ํ ์ ์๋ ์์น์ ์ฌ๊ณผ ์ ์ฅ
์ต์ข ๋ฐฐ์ด arr์ ์ถ๋ ฅํ๋ค.