did_story

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Java] ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ ๋ณธ๋ฌธ

Algorithm๐ŸŒŠ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Java] ๊ฑฐ๋ฆฌ๋‘๊ธฐ ํ™•์ธํ•˜๊ธฐ

์–ด์ œ์‹œ์ž‘ 2025. 9. 29. 01:53

๋ฌธ์ œ๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ ๋ณผ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ ์„ค๋ช…

์ฝ”๋กœ๋‚˜ ๋ฐ”์ด๋Ÿฌ์Šค ๊ฐ์—ผ ์˜ˆ๋ฐฉ์„ ์œ„ํ•ด ์‘์‹œ์ž๋“ค์€ ๊ฑฐ๋ฆฌ๋ฅผ ๋‘ฌ์„œ ๋Œ€๊ธฐ๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ ๊ฐœ๋ฐœ ์ง๊ตฐ ๋ฉด์ ‘์ธ ๋งŒํผ
์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ๋Œ€๊ธฐ์‹ค์— ๊ฑฐ๋ฆฌ๋ฅผ ๋‘๊ณ  ์•‰๋„๋ก ์•ˆ๋‚ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์‹ค์€ 5๊ฐœ์ด๋ฉฐ, ๊ฐ ๋Œ€๊ธฐ์‹ค์€ 5x5 ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.
๊ฑฐ๋ฆฌ๋‘๊ธฐ๋ฅผ ์œ„ํ•˜์—ฌ ์‘์‹œ์ž๋“ค ๋ผ๋ฆฌ๋Š” ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๊ฐ€ 2 ์ดํ•˜๋กœ ์•‰์ง€ ๋ง์•„ ์ฃผ์„ธ์š”.
๋‹จ ์‘์‹œ์ž๊ฐ€ ์•‰์•„์žˆ๋Š” ์ž๋ฆฌ ์‚ฌ์ด๊ฐ€ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ง‰ํ˜€ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•.

๊ฐ ‘P’์— ๋Œ€ํ•ด:
๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ 2 ์ด๋‚ด์—์„œ, 'O'๋Š” ๊ฑฐ๋ฆฌ<2์ผ ๋•Œ๋งŒ ํ™•์žฅํ•˜๋ฉฐ ํƒ์ƒ‰ํ•œ๋‹ค.
ํƒ์ƒ‰ ๋„์ค‘ ๋‹ค๋ฅธ 'P'๋ฅผ ๋งŒ๋‚˜๋ฉด ์ฆ‰์‹œ ์œ„๋ฐ˜.
'X'์˜ ๊ฒฝ์šฐ๋Š” ์ƒ๊ฐํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๊ณ  ํŒ๋‹จ (๋งŒ๋‚˜๋ฉด ๊ทธ๊ณณ์€ ๋ชป์ง€๋‚˜๊ฐ€๋‹ˆ๊นŒ.)

 

์ฝ”๋“œ

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int[] solution(String[][] places) {
        int[] answer = new int[places.length];

        for (int i = 0; i < places.length; i++) {
            boolean ok = true;
            String[] p = places[i];

            out:
            for (int r = 0; r < 5; r++) {
                for (int c = 0; c < 5; c++) {
                    if (p[r].charAt(c) == 'P') {
                        if (bfs(r, c, p)) {
                            ok = false;
                            break out;
                        }
                    }
                }
            }

            answer[i] = ok ? 1 : 0;
        }
        return answer;
    }

    private static boolean bfs(int r, int c, String[] p){
        int[] dr = {-1, 1, 0, 0};
        int[] dc = {0, 0, -1, 1};

        Queue<int[]> q = new LinkedList<int[]>();
        q.offer(new int[]{r, c});

        while(!q.isEmpty()){
            int[] position = q.poll();

            for (int i = 0 ; i < 4 ; i ++){
                int nowR = position[0] + dr[i];
                int nowC = position[1] + dc[i];

                if (nowR < 0 || nowC < 0 || nowR >= 5 || nowC >= 5 || (nowR == r && nowC == c)) continue;
                int d = Math.abs(nowR - r) + Math.abs(nowC - c);

                if (d <= 2 && p[nowR].charAt(nowC) == 'P') return true;
                else if (d < 2 && p[nowR].charAt(nowC) == 'O') q.offer(new int[]{nowR, nowC});
            }
        }

        return false;
    }
}

 

 

ํšŒ๊ณ 

bfs๋ผ๊ณ  ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ํ›„ ๋ฌธ์ œ๋ฅผ ๋ฐ›์•„ ๋“œ๋ ค์„œ, ์ƒ๊ฐ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํ‘ผ ๊ฐ์ด ์žˆ๋‹ค. ๋ฌผ๋ก  ์ค‘๊ฐ„์ค‘๊ฐ„ BFS ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๋”๋ผ๋Š” ์ƒ๊ฐ์ด ์žˆ์—ˆ์ง€๋งŒ... BFS ๋กœ์ง์„ ์•ˆ๊นŒ๋จน๊ณ  ์žˆ์–ด์„œ ๋‹คํ–‰์ด๋‹ค.