์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ Programmers ] ์นด์นด์˜คํ”„๋ Œ์ฆˆ ์ปฌ๋Ÿฌ๋ง๋ถ ( ์ž๋ฐ” / JAVA )

KIMHYEYUN 2022. 8. 31. 21:43
๋ฐ˜์‘ํ˜•

https://school.programmers.co.kr/learn/courses/30/lessons/1829

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 


 

๋ฌธ์ œ

๋ฌธ์ œ ์„ค๋ช…

์ถœํŒ์‚ฌ์˜ ํŽธ์ง‘์ž์ธ ์–ดํ”ผ์น˜๋Š” ๋„ค์˜ค์—๊ฒŒ ์ปฌ๋Ÿฌ๋ง๋ถ์— ๋“ค์–ด๊ฐˆ ์›ํ™”๋ฅผ ๊ทธ๋ ค๋‹ฌ๋ผ๊ณ  ๋ถ€ํƒํ•˜์—ฌ ์—ฌ๋Ÿฌ ์žฅ์˜ ๊ทธ๋ฆผ์„ ๋ฐ›์•˜๋‹ค. ์—ฌ๋Ÿฌ ์žฅ์˜ ๊ทธ๋ฆผ์„ ๋‚œ์ด๋„ ์ˆœ์œผ๋กœ ์ปฌ๋Ÿฌ๋ง๋ถ์— ๋„ฃ๊ณ  ์‹ถ์—ˆ๋˜ ์–ดํ”ผ์น˜๋Š” ์˜์—ญ์ด ๋งŽ์œผ๋ฉด ์ƒ‰์น ํ•˜๊ธฐ๊ฐ€ ๊นŒ๋‹ค๋กœ์›Œ ์–ด๋ ค์›Œ์ง„๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ทธ๋ฆผ์˜ ๋‚œ์ด๋„๋ฅผ ์˜์—ญ์˜ ์ˆ˜๋กœ ์ •์˜ํ•˜์˜€๋‹ค. (์˜์—ญ์ด๋ž€ ์ƒํ•˜์ขŒ์šฐ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฐ™์€ ์ƒ‰์ƒ์˜ ๊ณต๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค.)
๊ทธ๋ฆผ์— ๋ช‡ ๊ฐœ์˜ ์˜์—ญ์ด ์žˆ๋Š”์ง€์™€ ๊ฐ€์žฅ ํฐ ์˜์—ญ์˜ ๋„“์ด๋Š” ์–ผ๋งˆ์ธ์ง€ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์ž.

์œ„์˜ ๊ทธ๋ฆผ์€ ์ด 12๊ฐœ ์˜์—ญ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ€์žฅ ๋„“์€ ์˜์—ญ์€ ์–ดํ”ผ์น˜์˜ ์–ผ๊ตด๋ฉด์œผ๋กœ ๋„“์ด๋Š” 120์ด๋‹ค.

์ž…๋ ฅ ํ˜•์‹

์ž…๋ ฅ์€ ๊ทธ๋ฆผ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” m๊ณผ n, ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ด๋Š” m × n ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด picture๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ œํ•œ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • 1 <= m, n <= 100
  • picture์˜ ์›์†Œ๋Š” 0 ์ด์ƒ 2^31 - 1 ์ดํ•˜์˜ ์ž„์˜์˜ ๊ฐ’์ด๋‹ค.
  • picture์˜ ์›์†Œ ์ค‘ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ๋Š” ์ƒ‰์น ํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์„ ๋œปํ•œ๋‹ค.

์ถœ๋ ฅ ํ˜•์‹

๋ฆฌํ„ด ํƒ€์ž…์€ ์›์†Œ๊ฐ€ ๋‘ ๊ฐœ์ธ ์ •์ˆ˜ ๋ฐฐ์—ด์ด๋‹ค. ๊ทธ๋ฆผ์— ๋ช‡ ๊ฐœ์˜ ์˜์—ญ์ด ์žˆ๋Š”์ง€์™€ ๊ฐ€์žฅ ํฐ ์˜์—ญ์€ ๋ช‡ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

์˜ˆ์ œ ์ž…์ถœ๋ ฅ

m n picture answer
0 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5]

 

ํ’€์ด

BFS ๋ฅผ ์ด์šฉํ•ด ํ’€์ด!! ์Œ‰๊ฐ„๋‹จ

~

๐Ÿ™‹‍โ™€๏ธ

  1. picture[i][j] ๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด BFS๋ฅผ ์‹œ์ž‘
  2. ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ์˜์—ญ์˜ ๋„“์ด๋ฅผ return ๋ฐ›์•„
  3. maxSizeOfArea ์™€ ๋น„๊ต
  4. cntOfArea += 1
  5. return new int[]{cntOfArea, maxSizeOfArea};

 

์ฝ”๋“œ

 boolean[][] isVisited;
    int maxSizeOfArea, cntOfAreas;
    int[] dx = {-1, 0, 0, 1};
    int[] dy = {0, -1, 1, 0};
    public int[] solution(int m, int n, int[][] picture) {
        isVisited = new boolean[m][n];
        maxSizeOfArea = 0;
        cntOfAreas = 0;

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if(picture[i][j] == 0) continue;
                if (!isVisited[i][j]) {
                    isVisited[i][j] = true;
                    int cnt = BFS(i, j, picture, m, n);

                    cntOfAreas += 1;
                    maxSizeOfArea = Math.max(maxSizeOfArea, cnt);
                }
            }
        }

        return new int[]{cntOfAreas, maxSizeOfArea};
    }

    private int BFS(int x, int y, int[][] picture, int m, int n) {
        Queue<int[]> q = new LinkedList<>();
        q.add(new int[]{x, y});
        int cnt = 1;

        while (!q.isEmpty()) {
            int[] cur = q.poll();
            for (int d = 0; d < 4; d++) {
                int nx = cur[0] + dx[d];
                int ny = cur[1] + dy[d];

                if(nx < 0 || ny < 0 || m <= nx || n <= ny || isVisited[nx][ny]) continue;
                if(picture[nx][ny] == 0) continue;
                if(picture[cur[0]][cur[1]] != picture[nx][ny]) continue;

                isVisited[nx][ny] = true;
                q.add(new int[]{nx, ny});
                cnt += 1;
            }
        }
        return cnt;
    }
728x90
๋ฐ˜์‘ํ˜•