๐Ÿ”ฅ[99ํด๋Ÿฝ ์ฝ”ํ…Œ ์Šคํ„ฐ๋””] 32์ผ์ฐจ TIL - ๋ฌด์ธ๋„ ์—ฌํ–‰

HOONSSACยท2024๋…„ 8์›” 22์ผ
1

99Club Coding Test Study

๋ชฉ๋ก ๋ณด๊ธฐ
32/41
post-thumbnail
post-custom-banner

โณ๋ฌธ์ œ

๋ฉ”๋ฆฌ๋Š” ์—ฌ๋ฆ„์„ ๋งž์•„ ๋ฌด์ธ๋„๋กœ ์—ฌํ–‰์„ ๊ฐ€๊ธฐ ์œ„ํ•ด ์ง€๋„๋ฅผ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋„์—๋Š” ๋ฐ”๋‹ค์™€ ๋ฌด์ธ๋„๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋„๋Š” 1 x 1ํฌ๊ธฐ์˜ ์‚ฌ๊ฐํ˜•๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์ง์‚ฌ๊ฐํ˜• ๊ฒฉ์ž ํ˜•ํƒœ์ด๋ฉฐ, ๊ฒฉ์ž์˜ ๊ฐ ์นธ์—๋Š” 'X' ๋˜๋Š” 1์—์„œ 9 ์‚ฌ์ด์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ ํ˜€์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋„์˜ 'X'๋Š” ๋ฐ”๋‹ค๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ˆซ์ž๋Š” ๋ฌด์ธ๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋•Œ, ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๋•…๋“ค์€ ํ•˜๋‚˜์˜ ๋ฌด์ธ๋„๋ฅผ ์ด๋ฃน๋‹ˆ๋‹ค. ์ง€๋„์˜ ๊ฐ ์นธ์— ์ ํžŒ ์ˆซ์ž๋Š” ์‹๋Ÿ‰์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ, ์ƒ, ํ•˜, ์ขŒ, ์šฐ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ์นธ์— ์ ํžŒ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ํ•ฉํ•œ ๊ฐ’์€ ํ•ด๋‹น ๋ฌด์ธ๋„์—์„œ ์ตœ๋Œ€ ๋ฉฐ์น ๋™์•ˆ ๋จธ๋ฌผ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์–ด๋–ค ์„ฌ์œผ๋กœ ๋†€๋Ÿฌ ๊ฐˆ์ง€ ๋ชป ์ •ํ•œ ๋ฉ”๋ฆฌ๋Š” ์šฐ์„  ๊ฐ ์„ฌ์—์„œ ์ตœ๋Œ€ ๋ฉฐ์น ์”ฉ ๋จธ๋ฌผ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณธ ํ›„ ๋†€๋Ÿฌ๊ฐˆ ์„ฌ์„ ๊ฒฐ์ •ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์ง€๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด maps๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ ์„ฌ์—์„œ ์ตœ๋Œ€ ๋ฉฐ์น ์”ฉ ๋จธ๋ฌด๋ฅผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฐฐ์—ด์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‹ด์•„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋งŒ์•ฝ ์ง€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฌด์ธ๋„๊ฐ€ ์—†๋‹ค๋ฉด -1์„ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•ด์ฃผ์„ธ์š”.

๐Ÿšจ์ œํ•œ ์‚ฌํ•ญ

  • 3 โ‰ค maps์˜ ๊ธธ์ด โ‰ค 100
  • 3 โ‰ค maps[i]์˜ ๊ธธ์ด โ‰ค 100
  • maps[i]๋Š” 'X' ๋˜๋Š” 1 ๊ณผ 9 ์‚ฌ์ด์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • ์ง€๋„๋Š” ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

๐Ÿ“„์ž…์ถœ๋ ฅ ์˜ˆ

mapsresult
["X591X","X1X5X","X231X", "1XXX1"][1, 1, 27]
["XXX","XXX","XXX"][-1]

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

์œ„ ๋ฌธ์ž์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ง€๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ๋œ ๋•…๋“ค์˜ ๊ฐ’์„ ํ•ฉ์น˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ

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

์œ„ ๋ฌธ์ž์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ง€๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์„ฌ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— -1์„ ๋ฐฐ์—ด์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


โœ๏ธํ’€์ด

์ด ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ์ €๋ฒˆ์— ํ’€์—ˆ๋˜ ๋‹จ์ง€ ๋ฒˆํ˜ธ ๋ถ™์ด๊ธฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฐ์ด ๋‚˜์„œ dfs๋กœ ํ’€์–ด์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.๐Ÿค”

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, 2์ฐจ์› ๋ฐฐ์—ด์— ์ง€๋„๋ฅผ ์ €์žฅํ•ด ์ธ๋ฑ์Šค๋ฅผ ์ญ‰ ์ˆœํšŒ ํ•˜๋‹ค๊ฐ€,
๋•…์„ ๋ฐœ๊ฒฌํ•˜๋ฉด, ํ•ด๋‹น ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์‚ดํ•€ ๋’ค, ์—ฐ์†๋œ ๋•…์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‹จ์ง€ ๋ฒˆํ˜ธ ๋ถ™์ด๊ธฐ ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ์ ์€, ์—ฐ์†๋œ ๋•…์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ๋•…์˜ ์ƒ์กด ์ผ์ˆ˜ ์ •๋ณด๋ฅผ ๋”ํ•ด๋‚˜๊ฐ€๋ฉฐ ๋ฌด์ธ๋„์˜ ์ตœ์ข… ์ƒ์กด ์ผ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ตฌํ˜„์— ์žˆ์–ด์„œ๋Š” intํ˜• ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์—ฐ์†๋œ ๋•…์˜ ์œ„์น˜๋กœ ์˜ฎ๊ฒจ๊ฐˆ ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์œ„์น˜์˜ ์›์†Œ๊ฐ’์„ ๋”ํ•ด๋‚˜๊ฐ€๋Š” ๋กœ์ง๋งŒ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

๐ŸŒฑ๋‚˜์˜ ์ฝ”๋“œ

import java.util.*;

class Solution {
    static int[][] map; // ์ง€๋„
    static boolean[][] visited; // ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    static int dayCount; // ํ•ด๋‹น ๋•…์—์„œ์˜ ์ƒ์กด ์ผ์ˆ˜
    static int[][] step = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // ์ƒํ•˜์ขŒ์šฐ ์ด๋™
    static int sizeRow; // ์ง€๋„ ๊ฐ€๋กœ ํฌ๊ธฐ
    static int sizeCol; // ์ง€๋„ ์„ธ๋กœ ํฌ๊ธฐ

    public static int[] solution(String[] maps) {
        int[] answer;
        sizeRow = maps[0].length();
        sizeCol = maps.length;
        map = new int[sizeCol][sizeRow];
        visited = new boolean[sizeCol][sizeRow];
        ArrayList<Integer> days = new ArrayList<>(); // ๋ฌด์ธ๋„์—์„œ์˜ ์ด ์ƒ์กด ์ผ์ˆ˜

        // ์ง€๋„ ์ •๋ณด ์ž…๋ ฅ
        for (int i = 0; i < sizeCol; i++) {
            String temp = maps[i];
            for (int j = 0; j < sizeRow; j++) {
                if (temp.charAt(j) == 'X') {
                    map[i][j] = 0;
                }
                else {
                    map[i][j] = Integer.parseInt(Character.toString(temp.charAt(j)));
                }
            }
        }


        for (int i = 0; i < sizeCol; i++) {
            for (int j = 0; j < sizeRow; j++) {
                if (!visited[i][j] && map[i][j] != 0) {
                    dayCount = 0;
                    dfs(i, j); // dfs ํ˜ธ์ถœ
                    days.add(dayCount); // ์ด ์ƒ์กด ์ผ์ˆ˜ ์ €์žฅ
                }
            }
        }

        // ์ฐพ์€ ๋ฌด์ธ๋„๊ฐ€ ์—†๋‹ค๋ฉด -1 ์ €์žฅ
        if (days.isEmpty()) {
            answer = new int[1];
            answer[0] = -1;
        }
        
        // ์ฐพ์€ ๋ฌด์ธ๋„๊ฐ€ ์žˆ๋‹ค๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ƒ์กด ์ผ์ˆ˜ ์ €์žฅ
        else {
            answer = new int[days.size()];

            for (int i = 0; i < answer.length; i++) {
                answer[i] = days.get(i);
            }
            Arrays.sort(answer);
        }

        return answer;
    }

    public static void dfs(int a, int b) {
        visited[a][b] = true; // ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ‘œ์‹œ
        dayCount += map[a][b]; // ์ƒ์กด ์ผ์ˆ˜ ์ฆ๊ฐ€

        // ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰
        for (int i = 0; i < 4; i++) {
            // ์ด๋™ํ•œ ์ขŒํ‘œ ๊ฐฑ์‹ 
            int newX = a + step[i][0];
            int newY = b + step[i][1];

            // ์ด๋™ํ•œ ์ขŒํ‘œ๊ฐ€ ์ง€๋„ ์•ˆ์— ์žˆ๊ณ , ๋•…์ด ์ด์–ด์ ธ ์žˆ๊ณ , ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด
            if (newX >= 0 && newX < sizeCol && newY >= 0 && newY < sizeRow && map[newX][newY] != 0 && !visited[newX][newY]) {
                dfs(newX, newY); // ํ•ด๋‹น ์ขŒํ‘œ๋กœ ์ด๋™
            }
        }

        
    }
}

๐ŸŒฑ์ฝ”๋“œ ์„ค๋ช…

  1. ์ง€๋„์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•ด์ค€ ๋’ค, ํ•ด๋‹น ํฌ๊ธฐ์™€ ์ผ์น˜ํ•˜๋Š” 2์ฐจ์› ๋ฐฐ์—ด map์„ ์ƒ์„ฑํ•ด์ฃผ๊ณ , maps๋ฐฐ์—ด ์ค‘ "X"๋ฅผ ์ œ์™ธํ•œ ์ˆซ์ž๋งŒ ์ง€๋„์— ์ €์žฅํ•œ๋‹ค.

  2. map[0][0]๋ถ€ํ„ฐ ์ง€๋„์˜ ๋๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉด์„œ, ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๊ณ , ์š”์†Œ๊ฐ€ 0์ด ์•„๋‹Œ ์œ„์น˜์—์„œ dfs๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ด ๋•Œ, ํ•ด๋‹น ๋ฌด์ธ๋„์˜ ์ด ์ƒ์กด ์ผ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” dayCount๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

  3. ํ•ด๋‹น ๋•…์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ์ด ์ƒ์กด ์ผ์ˆ˜๋ฅผ ํ•ด๋‹น ๋•…์˜ ์ƒ์กด ์ผ์ˆ˜๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

  4. ์ƒํ•˜์ขŒ์šฐ ์ด๋™ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ 2์ฐจ์› ๋ฐฐ์—ด step ์„ ์ด์šฉํ•ด ์ขŒํ‘œ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

  5. ์ด๋™ํ•œ ์ขŒํ‘œ๊ฐ€ ์ง€๋„ ์•ˆ์— ์žˆ๊ณ , ๋•…์ด ์ด์–ด์ ธ ์žˆ๊ณ , ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด, ํ•ด๋‹น ์ขŒํ‘œ๋กœ ์ด๋™ํ•ด dfs๋ฅผ ์žฌ๊ท€ ํ˜ธ์ถœํ•œ๋‹ค.

  6. ์ง€๋„ ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด, ์ฐพ์€ ๋ฌด์ธ๋„์˜ ์ด ์ผ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” days๋ฅผ ํ™•์ธํ•ด, ์ฐพ์€ ๋ฌด์ธ๋„๊ฐ€ ์—†๋‹ค๋ฉด answer์— -1์„ ์ €์žฅํ•˜๊ณ , ์ฐพ์€ ๋ฌด์ธ๋„๊ฐ€ ์žˆ๋‹ค๋ฉด ์ƒ์กด ์ผ์ˆ˜๋“ค์„ answer์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ €์žฅํ•œ๋‹ค.


๐Ÿ”—๋ฌธ์ œ ๋งํฌ
๐Ÿ’ปRepository

profile
ํ›ˆ์‹น์˜ ๊ฐœ๋ฐœ์—ฌํ–‰
post-custom-banner

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

comment-user-thumbnail
2024๋…„ 8์›” 22์ผ

๐Ÿ ์ฐจ๊ทผ์ฐจ๊ทผ ๊น”๋”ํ•˜๊ณ  ๋ฉ‹์ง„ ์„ค๋ช…์ด์—์š” ๐Ÿ‘๐Ÿ‘

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ