๐ŸŽฏ Coding Test

[๋ฐฑ์ค€] 1012 ์œ ๊ธฐ๋†๋ฐฐ์ถ” ์ž๋ฐ” BFS, DFS

์—ฐ_์šฐ๋ฆฌ 2022. 2. 21. 15:45
๋ฐ˜์‘ํ˜•

 

๋ชฉ์ฐจ

     

     

     

    https://www.acmicpc.net/problem/1012

     

    1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

    ์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— 

    www.acmicpc.net

     

     

     

    ๋ฌธ์ œํ’€์ด

    ์ธ์ ‘ํ•œ ์ขŒํ‘œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

    ์ธ์ ‘ํ•˜๋‹คํ•ด์„œ bfs, dfs๊ฐ€ ๋– ์˜ฌ๋ž๊ณ ,

    ์ƒํ•˜์ขŒ์šฐ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹คํ•ด์„œ dx, dy์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋– ์˜ฌ๋ž๋‹ค

     

    ์ผ๋ฐ˜์ ์ธ bfs, dfs๋Š” ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ 1๋ฒˆ์—์„œ ์‹œ์ž‘ํ•˜๋ฉด ์—ฐ๊ฒฐ๋œ 9๋ฒˆ๊นŒ์ง€ ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

     

    ๋ฌธ์ œ์— bfs, dfs๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋ ๊นŒ?

    (0,0)์—์„œ ์‹œ์ž‘ํ•œ๋‹ค ํ–ˆ์„ ๋•Œ (1,1)๊นŒ์ง€๋งŒ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€๋Š” ํƒ์ƒ‰ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋๋‚˜๋ฒ„๋ฆฐ๋‹ค!

     

    ๊ทธ๋ž˜์„œ bfs, dfs๋ฅผ ๋ฐ˜๋ณต๋ฌธ์•ˆ์— ๋„ฃ์–ด์„œ, ์‹œ์ž‘์ขŒํ‘œ๋ฅผ ๋‹ค์‹œ ์…‹ํŒ…ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

    ์ง€๋ ์ด์˜ ์ˆ˜๋„ ์ด ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ๋„ฃ์–ด์„œ ์ฒดํฌํ•ด์ฃผ์ž.

    int count=0;    //ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ์ง€๋ ์ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์•ผํ•œ๋‹ค
                
    //bfs์˜ ์‹œ์ž‘์ขŒํ‘œ๋ฅผ ์…‹ํŒ…ํ•ด์„œ ๋‹ค๋ฅธ ๊ณณ์— ๋ชจ์—ฌ์žˆ๋Š” ๋ฐฐ์ถ”๋“ค๋„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค
    //๊ฐ€๋กœ ์„ธ๋กœ ์ขŒํ‘œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ž…๋ ฅํ•ด์ฃผ๊ณ 
    for (int j = 0; j < weight; j++) {
        for (int k = 0; k < height; k++) {
    
            //์ขŒํ‘œ์— ๋ฐฐ์ถ”๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ, ๋‚ด๊ฐ€ ์ฒดํฌ์•ˆํ•œ ๊ณณ์ธ์ง€ ํ™•์ธํ•œ๋‹ค
             if(ground[j][k] == 1 && !check[j][k]){
                 //๋ฐฐ์ถ”๊ฐ€ ์žˆ๊ณ  ์ฒดํฌ์•ˆ๋œ ์ขŒํ‘œ์—์„œ๋ถ€ํ„ฐ bfs๋กœ ์—ฐ๊ฒฐ๋œ ๊ณณ์„ ํŒŒ์•…ํ•œ๋‹ค
                 bfs(j, k); or dfs(j,k);
    
                 //์ง€๋ ์ด์˜ ๊ฐœ์ˆ˜๋Š” ์ธ์ ‘ํ•œ ๊ณณ๋งˆ๋‹ค 1๊ฐœ์”ฉ์ด๋‹ค.
                 //์ธ์ ‘ํ•œ ๊ณณ์„ ๋ชจ๋‘ ํŒŒ์•…ํ–ˆ์œผ๋ฉด ์ง€๋ ์ด๋ฅผ ํ•œ๋งˆ๋ฆฌ ๋†“๋Š”๋‹ค.
                 count++;
             }
        }
    }

     

     

    ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋Š” ํ’€์ด(bfs, dfs)

     - j= 0, k= 0์ผ๋•Œ

       => bfs(0,0)

       => bfs๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์ธ์ ‘ ์ขŒํ‘œ ํƒ์ƒ‰ (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ )

       => dfs(0,0)

       => dfs๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์ธ์ ‘ ์ขŒํ‘œ ํƒ์ƒ‰ (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ )

     

     - j= 0, k= 1์ผ๋•Œ    => ground[0][1] = 0 ์ด๋ฏ€๋กœ ํŒจ์Šค

     - j= 0, k= 2์ผ๋•Œ    => ground[0][1] = 0 ์ด๋ฏ€๋กœ ํŒจ์Šค

    ....

     - j= 1, k= 0์ผ๋•Œ    => check[1][0] = true ์ด๋ฏ€๋กœ ํŒจ์Šค

     - j= 1, k= 1์ผ๋•Œ    => check[1][1] = true ์ด๋ฏ€๋กœ ํŒจ์Šค

     - j= 1, k= 2์ผ๋•Œ    => ground[1][2] = 0 ์ด๋ฏ€๋กœ ํŒจ์Šค

    ....

     - j= 2, k= 3์ผ๋•Œ    => ground[2][3] = 0 ์ด๋ฏ€๋กœ ํŒจ์Šค

     - j= 2, k= 4์ผ๋•Œ

       => bfs(2,4)

       => bfs๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์ธ์ ‘ ์ขŒํ‘œ ํƒ์ƒ‰ (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ )

       => dfs(2,4)

       => dfs๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์ธ์ ‘ ์ขŒํ‘œ ํƒ์ƒ‰ (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ )

     

    ... ๊ณ„์† ๋ฐ˜๋ณต

     

     

    ์ œ์ถœ์ฝ”๋“œ

    BFS ์‚ฌ์šฉ

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.StringTokenizer;
    
    public class Main {
    
        static int[][] ground;      //2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐฐ์ถ”๋ฐญ์„ ํ‘œํ˜„ํ•œ๋‹ค
        static boolean[][] check;   //2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐฐ์ถ”๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฒดํฌํ•œ๋‹ค
        static int weight;          //๋ฐฐ์ถ”๋ฐญ์˜ ๊ฐ€๋กœ
        static int height;          //๋ฐฐ์ถ”๋ฐญ์˜ ์„ธ๋กœ
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int T = Integer.parseInt(br.readLine());
            StringTokenizer st;
            for (int i = 0; i < T; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                weight = Integer.parseInt(st.nextToken());
                height = Integer.parseInt(st.nextToken());
                ground = new int[weight][height];
                check = new boolean[weight][height];
    
                int K = Integer.parseInt(st.nextToken());
                for (int j = 0; j < K; j++) {
                    st = new StringTokenizer(br.readLine(), " ");
                    int x = Integer.parseInt(st.nextToken());
                    int y = Integer.parseInt(st.nextToken());
                    ground[x][y] = 1;   //๋ฐฐ์ถ” ์ขŒํ‘œ ์ž…๋ ฅ
                }
                //===========================================================
                //์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ž…๋ ฅ๋œ ๋‚ด์šฉ ์ €์žฅํ•˜๋Š” ๋‚ด์šฉ์ด๋‹ค.
    
                int count=0;    //ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ์ง€๋ ์ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์•ผํ•œ๋‹ค
                
                //bfs์˜ ์‹œ์ž‘์ขŒํ‘œ๋ฅผ ์…‹ํŒ…ํ•ด์„œ ๋‹ค๋ฅธ ๊ณณ์— ๋ชจ์—ฌ์žˆ๋Š” ๋ฐฐ์ถ”๋“ค๋„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค
                //๊ฐ€๋กœ ์„ธ๋กœ ์ขŒํ‘œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ž…๋ ฅํ•ด์ฃผ๊ณ 
                for (int j = 0; j < weight; j++) {
                    for (int k = 0; k < height; k++) {
                        
                        //์ขŒํ‘œ์— ๋ฐฐ์ถ”๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ, ๋‚ด๊ฐ€ ์ฒดํฌ์•ˆํ•œ ๊ณณ์ธ์ง€ ํ™•์ธํ•œ๋‹ค
                         if(ground[j][k] == 1 && !check[j][k]){
                             //๋ฐฐ์ถ”๊ฐ€ ์žˆ๊ณ  ์ฒดํฌ์•ˆ๋œ ์ขŒํ‘œ์—์„œ๋ถ€ํ„ฐ bfs๋กœ ์—ฐ๊ฒฐ๋œ ๊ณณ์„ ํŒŒ์•…ํ•œ๋‹ค
                             bfs(j, k);
                             
                             //์ง€๋ ์ด์˜ ๊ฐœ์ˆ˜๋Š” ์ธ์ ‘ํ•œ ๊ณณ๋งˆ๋‹ค 1๊ฐœ์”ฉ์ด๋‹ค.
                             //์ธ์ ‘ํ•œ ๊ณณ์„ ๋ชจ๋‘ ํŒŒ์•…ํ–ˆ์œผ๋ฉด ์ง€๋ ์ด๋ฅผ ํ•œ๋งˆ๋ฆฌ ๋†“๋Š”๋‹ค.
                             count++;
                         }
                    }
                }
    
                System.out.println(count);
            }
    
        }
    
        private static void bfs(int startX, int startY) {
            Queue<int[]> queue = new LinkedList<>();
            //bfs์—์„œ queue์˜ ์—ญํ• ์€ ๋‹ค์Œ ํƒ์ƒ‰ํ•  ์ขŒํ‘œ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด ๋†“๋Š” ๊ฒƒ์ด๋‹ค.
            //bfs 1๋ฒˆ ์‹คํ–‰๋ ๋•Œ๋งˆ๋‹ค ์ธ์ ‘ํ•œ ๊ณณ์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๊ณ  ์ข…๋ฃŒ๋˜๋‹ˆ bfs์•ˆ์— queue๋ฅผ ์„ ์–ธํ–ˆ๋‹ค.
            
            queue.offer(new int[] {startX, startY});
            //x, y์ขŒํ‘œ ์ €์žฅ
            
            check[startX][startY] = true;
            //์‹œ์ž‘์ขŒํ‘œ์—” ๋ฐฐ์ถ”๊ฐ€ ์žˆ์œผ๋‹ˆ ๋ฏธ๋ฆฌ true๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.
            
            int[] X = {0, 0, -1, +1};
            int[] Y = {-1, +1, 0, 0};
            //๋ฐฐ์ถ”๊ฐ€ ์ƒํ•˜์ขŒ์šฐ์— ์ธ์ ‘ํ•˜๋ฉด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
            //ํ˜„์žฌ์ขŒํ‘œ์—์„œ ์ƒํ•˜์ขŒ์šฐ ์›€์ง์ด๋Š” ์ขŒํ‘œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.
    
            //queue๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ๋”์ด์ƒ ์ธ์ ‘ํ•œ ๋ฐฐ์ถ”๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋‹ค.
            while(!queue.isEmpty()){
                int[] poll = queue.poll();
                //์ €์žฅ๋œ queue๋ฅผ ๊บผ๋‚ธ๋‹ค
                
                //์ƒํ•˜์ขŒ์šฐ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด๋‹ˆ for๋ฌธ 4๋ฒˆ ๋ฐ˜๋ณต
                for (int i = 0; i < 4; i++) {
                    int x = poll[0] + X[i];
                    int y = poll[1] + Y[i];
                    //์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ ์กฐ์ •
    
                    //์ขŒํ‘œ๊ฐ€ ๋ฐฐ์ถ”๋ฐญ์„ ๋ฒ—์–ด๋‚˜๊ฒŒ๋˜๋ฉด ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ ์ฒดํฌํ•ด์•ผํ•œ๋‹ค
                    if(x < 0 || x >= weight || y < 0 || y >= height){
                        continue;
                    }
    
                    //์ƒํ•˜์ขŒ์šฐ ์›€์ง์ธ ์ขŒํ‘œ์— ๋ฐฐ์ถ”๊ฐ€ ์žˆ๊ณ , ์ฒดํฌํ•˜์ง€ ์•Š์€ ์ขŒํ‘œ์ด๋ฉด
                    if(ground[x][y] == 1 & !check[x][y]){
                        queue.offer(new int[] {x, y});
                        //์ขŒํ‘œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
                        check[x][y] = true;
                        //์ฒดํฌํ•œ๋‹ค
                    }
    
                }
            }
    
        }
    
    }

     

     

    DFS์‚ฌ์šฉ

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.StringTokenizer;
    
    public class Main {
    
        static int[][] ground;      //2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐฐ์ถ”๋ฐญ์„ ํ‘œํ˜„ํ•œ๋‹ค
        static boolean[][] check;   //2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐฐ์ถ”๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฒดํฌํ•œ๋‹ค
        static int weight;          //๋ฐฐ์ถ”๋ฐญ์˜ ๊ฐ€๋กœ
        static int height;          //๋ฐฐ์ถ”๋ฐญ์˜ ์„ธ๋กœ
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int T = Integer.parseInt(br.readLine());
            StringTokenizer st;
            for (int i = 0; i < T; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                weight = Integer.parseInt(st.nextToken());
                height = Integer.parseInt(st.nextToken());
                ground = new int[weight][height];
                check = new boolean[weight][height];
    
                int K = Integer.parseInt(st.nextToken());
                for (int j = 0; j < K; j++) {
                    st = new StringTokenizer(br.readLine(), " ");
                    int x = Integer.parseInt(st.nextToken());
                    int y = Integer.parseInt(st.nextToken());
                    ground[x][y] = 1;   //๋ฐฐ์ถ” ์ขŒํ‘œ ์ž…๋ ฅ
                }
                //===========================================================
                //์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ž…๋ ฅ๋œ ๋‚ด์šฉ ์ €์žฅํ•˜๋Š” ๋‚ด์šฉ์ด๋‹ค.
    
                int count=0;    //ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ์ง€๋ ์ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์•ผํ•œ๋‹ค
    
                //bfs์˜ ์‹œ์ž‘์ขŒํ‘œ๋ฅผ ์…‹ํŒ…ํ•ด์„œ ๋‹ค๋ฅธ ๊ณณ์— ๋ชจ์—ฌ์žˆ๋Š” ๋ฐฐ์ถ”๋“ค๋„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค
                //๊ฐ€๋กœ ์„ธ๋กœ ์ขŒํ‘œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ž…๋ ฅํ•ด์ฃผ๊ณ 
                for (int j = 0; j < weight; j++) {
                    for (int k = 0; k < height; k++) {
    
                        //์ขŒํ‘œ์— ๋ฐฐ์ถ”๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ, ๋‚ด๊ฐ€ ์ฒดํฌ์•ˆํ•œ ๊ณณ์ธ์ง€ ํ™•์ธํ•œ๋‹ค
                         if(ground[j][k] == 1 && !check[j][k]){
                             //๋ฐฐ์ถ”๊ฐ€ ์žˆ๊ณ  ์ฒดํฌ์•ˆ๋œ ์ขŒํ‘œ์—์„œ๋ถ€ํ„ฐ dfs๋กœ ์—ฐ๊ฒฐ๋œ ๊ณณ์„ ํŒŒ์•…ํ•œ๋‹ค
                             dfs(j, k);
    
                             //์ง€๋ ์ด์˜ ๊ฐœ์ˆ˜๋Š” ์ธ์ ‘ํ•œ ๊ณณ๋งˆ๋‹ค 1๊ฐœ์”ฉ์ด๋‹ค.
                             //์ธ์ ‘ํ•œ ๊ณณ์„ ๋ชจ๋‘ ํŒŒ์•…ํ–ˆ์œผ๋ฉด ์ง€๋ ์ด๋ฅผ ํ•œ๋งˆ๋ฆฌ ๋†“๋Š”๋‹ค.
                             count++;
                         }
                    }
                }
    
                System.out.println(count);
            }
    
        }
    
        private static void dfs(int startX, int startY) {
            check[startX][startY] = true;
            //์‹œ์ž‘์ขŒํ‘œ์—” ๋ฐฐ์ถ”๊ฐ€ ์žˆ์œผ๋‹ˆ ๋ฏธ๋ฆฌ true๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.
    
            int[] X = {0, 0, -1, +1};
            int[] Y = {-1, +1, 0, 0};
            //๋ฐฐ์ถ”๊ฐ€ ์ƒํ•˜์ขŒ์šฐ์— ์ธ์ ‘ํ•˜๋ฉด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
            //ํ˜„์žฌ์ขŒํ‘œ์—์„œ ์ƒํ•˜์ขŒ์šฐ ์›€์ง์ด๋Š” ์ขŒํ‘œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.
    
            //์ƒํ•˜์ขŒ์šฐ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด๋‹ˆ for๋ฌธ 4๋ฒˆ ๋ฐ˜๋ณต
            for (int i = 0; i < 4; i++) {
                int x = startX + X[i];
                int y = startY + Y[i];
                //์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ ์กฐ์ •
    
                //์ขŒํ‘œ๊ฐ€ ๋ฐฐ์ถ”๋ฐญ์„ ๋ฒ—์–ด๋‚˜๊ฒŒ๋˜๋ฉด ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ ์ฒดํฌํ•ด์•ผํ•œ๋‹ค
                if(x < 0 || x >= weight || y < 0 || y >= height){
                    continue;
                }
    
                //์ƒํ•˜์ขŒ์šฐ ์›€์ง์ธ ์ขŒํ‘œ์— ๋ฐฐ์ถ”๊ฐ€ ์žˆ๊ณ , ์ฒดํฌํ•˜์ง€ ์•Š์€ ์ขŒํ‘œ์ด๋ฉด
                if(ground[x][y] == 1 & !check[x][y]){
                    dfs(x, y);	//ํ•ด๋‹น ์ขŒํ‘œ๋กœ dfs ์‹คํ–‰
                }
    
            }
    
    
        }
    
    }

     

     

     

    ๋ฐ˜์‘ํ˜•
    • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
    • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
    • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
    • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
    • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ