๊ณจ๋5
์ต์ ์ด๋์ผ๋ก N์ผ๋ก ์ด๋ํด๋ผ
ans
๋ณ์๋ฅผ ๊ฐ์ฅ ๋จ์ํ, 100๋ถํฐ ํ๋์ฉ ์ฌ๋ผ/๋ด๋ ค๊ฐ๋ ์ด๋ ์๋ก ์ด๊ธฐํํ ๋ค์ ์ต์ ํํ๋ค.
int ans = Math.abs(N - 100);
์ด์ 0๋ถํฐ ๋๋์ก์ 999999๊น์ง for loop
์ ๋๋ฉด์ ๋ ๋์ ๋ต์์ ์ฐพ๊ณ ์ ํ๋ค.
for (int i = 0; i <= 999999; i++) {
...
}
i
์ ๊ฐ ์๋ฆฟ์๋ง๋ค ๊ณ ์ฅ๋ ๋ฒํผ์ธ์ง ํ์ธํ๋ค.
i
์์ N
๊น์ง ๋๋ฌํ๋๋ฐ ํ์ํ 1๋จ์ ์ด๋ ์์ i
๋ฅผ ์
๋ ฅํ๋๋ฐ ํ์ํ ์ด๋ ์ (values.length
)๋ฅผ ๊ธฐ์กด ans
๊ฐ๊ณผ ๋น๊ตํ์ฌ ์ต์๊ฐ์ ์ ์ฅํ๋ค.int ans = Math.abs(N - 100);
for (int i = 0; i <= 999999; i++) {
char[] values = String.valueOf(i).toCharArray();
for (int j = 0; j < values.length; j++) {
if (broken[values[j] - '0']) {
break;
} else if (j == values.length - 1) {
ans = Math.min(ans, Math.abs(i - N) + values.length);
}
}
}
System.out.println(ans);
๊ณ ์ฅ๋ ๋ฒํผ์ ์๊ฐ 0์ธ ๊ฒฝ์ฐ ์ซ์๊ฐ ์์ ์ฃผ์ด์ง์ง ์๋๋ค. ์ด๋ฅผ ๊ณ ๋ คํ์ฌ if๋ฌธ์ ์ด์ฉํ์ฌ ๋ฒํผ๋๋ฆฌ๋๋ฅผ ์ฌ์ฉํ์ด์ผ ํ๋ค. ์ด ๋๋ฌธ์ NullPoint
์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ค๋ฒ1
๊ฐ ์ ์ i์ ๋ํด์ dfs๋ฅผ ์ํํด์ j๋ก ์ด์ด์ง๋ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ result[i][j] = 1
๋ก ์ ์ฅํ๋ค.
for (int i = 0; i < N; i++) {
visited = new boolean[N];
dfs(i, i);
}
dfs๋ ๋ค์๊ณผ ๊ฐ์ด ์ํํ๋ค
private static void dfs(int start, int target) {
for (int next = 0; next < N; next++) {
if (matrix[target][next] == 1 && !visited[next]) {
visited[next] = true;
result[start][next] = 1;
dfs(start, next);
}
}
}
๊ณจ๋4
(1) ๋ฌผ ์นธ์ ํ์ ๋ชจ์๋ค
(2) ๊ณ ์ด๋์น์ ์์น๋ฅผ ํ์ธํ๋ค
grid = new char[R][C];
waterGrid = new int[R][C];
ArrayDeque<int[]> waterQueue = new ArrayDeque<>();
int startY = -1, startX = -1;
for (int i = 0; i < R; i++) {
String line = br.readLine();
for (int j = 0; j < C; j++) {
grid[i][j] = line.charAt(j);
if (isWater(i, j)) waterQueue.addLast(new int[] {i, j});
else waterGrid[i][j] = Integer.MAX_VALUE;
if (isHedgeHog(i, j)) {
startY = i;
startX = j;
}
}
}
1์ด๋ง๋ค ์ธ์ 4๋ถ๋ฉด์ผ๋ก ํ์ฅํ๋ค.
private static void updateWater(ArrayDeque<int[]> queue) {
while (!queue.isEmpty()) {
int[] node = queue.pollFirst();
int y = node[0];
int x = node[1];
for (int d = 0; d < 4; d++) {
int ny = y + DY[d];
int nx = x + DX[d];
if (!isValidCoordinate(ny, nx) || waterGrid[ny][nx] != Integer.MAX_VALUE || isRock(ny, nx) || isBeaver(ny, nx)) continue;
waterGrid[ny][nx] = waterGrid[y][x] + 1;
queue.addLast(new int[] {ny, nx});
}
}
}
private static int bfs(int startY, int startX) {
ArrayDeque<int[]> queue = new ArrayDeque<>();
int[][] visited = new int[R][C];
queue.addLast(new int[] {startY, startX});
visited[startY][startX] = 1;
while (!queue.isEmpty()) {
int[] node = queue.pollFirst();
int y = node[0];
int x = node[1];
if (isBeaver(y, x)) return visited[y][x] - 1;
for (int d = 0; d < 4; d++) {
int ny = y + DY[d];
int nx = x + DX[d];
if (!isValidCoordinate(ny, nx) || visited[ny][nx] > 0 || isRock(ny, nx) || isWater(ny, nx)) continue;
if (waterGrid[ny][nx] > visited[y][x] || waterGrid[ny][nx] == Integer.MAX_VALUE) {
visited[ny][nx] = visited[y][x] + 1;
queue.addLast(new int[] {ny, nx});
}
}
}
return -1;
}