2024-12-16 ๐Ÿช”

์ง€๋‹ˆ๐Ÿงธยท2024๋…„ 12์›” 16์ผ
0

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
43/43

๋ฆฌ๋ชจ์ฝ˜ [๋ฐฑ์ค€#1107]

๊ณจ๋“œ5

๋ฌธ์ œ

  • ํƒ€๊ฒŸ ์ฑ„๋„ N์ด ์ฃผ์–ด์ง„๋‹ค (0 <= N <= 500000)
  • ์„ ํƒ์ง€๋Š” 0~9 ์ˆซ์ž ๋˜๋Š” + (์ฑ„๋„ + 1), - (์ฑ„๋„ - 1)
  • M๊ฐœ์˜ ๊ณ ์žฅ๋‚œ ์ฑ„๋„์ด ์ฃผ์–ด์ง„๋‹ค
  • ์‹œ์ž‘ ์ฑ„๋„์€ 100์ด๋‹ค.

์ตœ์†Œ ์ด๋™์œผ๋กœ 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 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.


๊ฒฝ๋กœ ์ฐพ๊ธฐ [๋ฐฑ์ค€#11403]

์‹ค๋ฒ„1

๋ฌธ์ œ

  • ๊ฐ€์ค‘์น˜ ์—†๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ G
  • ๋ชจ๋“  ์ •์  (i, j)์— ๋Œ€ํ•ด์„œ i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ธธ์ด๊ฐ€ ์–‘์ˆ˜์ธ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€
  • ๊ทธ๋ž˜ํ”„์˜ ์ธ์ ‘ ํ–‰๋ ฌ์ด 1, 0 ๊ฐ’์„ ๋‹ด์•„ ์ฃผ์–ด์ง„๋‹ค
  • i๋ฒˆ์งธ ์ค„์˜ i๋ฒˆ์งธ ์ˆซ์ž๋Š” ํ•ญ์ƒ 0์ด๋‹ค

ํ’€์ด

๊ฐ ์ •์  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);
        }
    }
}

ํƒˆ์ถœ [๋ฐฑ์ค€#3055]

๊ณจ๋“œ4

๋ฌธ์ œ

  • 2D ์ง€๋„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค
    • ๋น„์–ด์žˆ๋Š” ๊ณณ, ๋ฌผ, ๋Œ, ๋น„๋ฒ„์˜ ๊ตด, ๊ณ ์Šด๋„์น˜
  • ๊ณ ์Šด๋„์น˜๋Š” ๋งค ๋ถ„ ์ธ์ ‘ 4์นธ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™
    • ๋ฌผ์ด ์ฐฐ ์˜ˆ์ •์ธ ๊ณณ์œผ๋กœ ์ด๋™ ๋ถˆ๊ฐ€
  • ๋ฌผ์€ 4๋ถ„๋ฉด ์ธ์ ‘ ์นธ์œผ๋กœ ํ™•์žฅ
  • ๊ณ ์Šด๋„์น˜๊ฐ€ ๋น„๋ฒ„์˜ ๊ตด์— ๋„๋‹ฌํ•˜๋Š” ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜๋ผ
    • ๋ถˆ๊ฐ€ํ•˜๋ฉด 'KAKTUS'

ํ’€์ด

1. ์ž…๋ ฅ ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค

(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;
        }
    }
}

2. ๋ฌผ ํ™•์žฅ์— ๊ด€ํ•œ ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค

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});
        }
    }
}

3. ๋ฌผ ๊ทธ๋ฆฌ๋“œ์™€ ๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜์—ฌ ๊ณ ์Šด๋„์น˜์˜ ์ด๋™์„ ๊ตฌํ˜„ํ•œ๋‹ค

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;
}

profile
์šฐ๋‹นํƒ•ํƒ•

0๊ฐœ์˜ ๋Œ“๊ธ€