Algorithm๐Ÿฅ‡

1406.์—๋””ํ„ฐ

hae02y 2023. 10. 16. 08:19
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

ํ•œ ์ค„๋กœ ๋œ ๊ฐ„๋‹จํ•œ ์—๋””ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ด ํŽธ์ง‘๊ธฐ๋Š” ์˜์–ด ์†Œ๋ฌธ์ž๋งŒ์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ์ง‘๊ธฐ๋กœ, ์ตœ๋Œ€ 600,000๊ธ€์ž๊นŒ์ง€ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ํŽธ์ง‘๊ธฐ์—๋Š” '์ปค์„œ'๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ, ์ปค์„œ๋Š” ๋ฌธ์žฅ์˜ ๋งจ ์•ž(์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์˜ ์™ผ์ชฝ), ๋ฌธ์žฅ์˜ ๋งจ ๋’ค(๋งˆ์ง€๋ง‰ ๋ฌธ์ž์˜ ์˜ค๋ฅธ์ชฝ), ๋˜๋Š” ๋ฌธ์žฅ ์ค‘๊ฐ„ ์ž„์˜์˜ ๊ณณ(๋ชจ๋“  ์—ฐ์†๋œ ๋‘ ๋ฌธ์ž ์‚ฌ์ด)์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๊ธธ์ด๊ฐ€ L์ธ ๋ฌธ์ž์—ด์ด ํ˜„์žฌ ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ์œผ๋ฉด, ์ปค์„œ๊ฐ€ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์€ L+1๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด ํŽธ์ง‘๊ธฐ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์•ˆ๋…•ํ•˜์„ธ

L ์ปค์„œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์˜ฎ๊น€ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ์•ž์ด๋ฉด ๋ฌด์‹œ๋จ)
D ์ปค์„œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์˜ฎ๊น€ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ๋’ค์ด๋ฉด ๋ฌด์‹œ๋จ)
B ์ปค์„œ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•จ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ์•ž์ด๋ฉด ๋ฌด์‹œ๋จ)
์‚ญ์ œ๋กœ ์ธํ•ด ์ปค์„œ๋Š” ํ•œ ์นธ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚˜์ง€๋งŒ, ์‹ค์ œ๋กœ ์ปค์„œ์˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋˜ ๋ฌธ์ž๋Š” ๊ทธ๋Œ€๋กœ์ž„
P $ $๋ผ๋Š” ๋ฌธ์ž๋ฅผ ์ปค์„œ ์™ผ์ชฝ์— ์ถ”๊ฐ€ํ•จ

์ดˆ๊ธฐ์— ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง€๊ณ , ๊ทธ ์ดํ›„ ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด๊ฐ€ ์ฐจ๋ก€๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚œ ํ›„ ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ช…๋ น์–ด๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ์ „์— ์ปค์„œ๋Š” ๋ฌธ์žฅ์˜ ๋งจ ๋’ค์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ดˆ๊ธฐ์— ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋ฌธ์ž์—ด์€ ๊ธธ์ด๊ฐ€ N์ด๊ณ , ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ธธ์ด๋Š” 100,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ž…๋ ฅํ•  ๋ช…๋ น์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ M(1 โ‰ค M โ‰ค 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ์ž…๋ ฅํ•  ๋ช…๋ น์–ด๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋ช…๋ น์–ด๋Š” ์œ„์˜ ๋„ค ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜์˜ ํ˜•ํƒœ๋กœ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚œ ํ›„ ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
0.3 ์ดˆ (ํ•˜๋‹จ ์ฐธ๊ณ ) 512 MB 108021 30050 20095 26.527%

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

ํ’€์ด

์ฝ”๋“œ

1๋ฒˆ์งธ ์‹œ๋„


public class ์—๋””ํ„ฐ {  

    public static void main(String[] args) throws IOException {  

        Scanner sc = new Scanner(System.in);  
        List<Character> list = new ArrayList<>();  

        String str = sc.nextLine(); //์ž…๋ ฅ 1๋ฒˆ์ค„์„ ๋ฐ›์•„์˜จ๋‹ค.  

        int cursor = 1; //์ปค์„œ๋ฅผ ์„ ์–ธ  

        for (int i = 0; i < str.length(); i++) {  
            list.add(str.charAt(i)); //๋ฆฌ์ŠคํŠธ์— str์„ ํ•œ๊ธ€์ž์”ฉ ๋„ฃ๋Š”๋‹ค.  
        }  

        cursor = list.size() + 1; //์ปค์„œ์˜ ์œ„์น˜๋ฅผ ์žก๋Š”๋‹ค.  

        int M = sc.nextInt(); //์ž…๋ ฅํ•  ๋ช…๋ น์–ด์˜ ๊ฐœ์ˆ˜  

        for (int i = 0; i < M; i++) { //๋ช…๋ น์–ด ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต  

            String command = sc.nextLine();  
            char c = command.charAt(0);  
            switch (c) {  
                case 'P':  
                    char ch = command.charAt(2);  
                    list.add(cursor - 1, ch); //์ปค์„œ๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ ํ•˜๋‹ˆ๊นŒ 1๋นผ์ค€๋‹ค.  
                    cursor += 1;  

                    break;  

                case 'L':  
                    if (cursor > 1) {  
                        cursor -= 1;  
                    }  
                    break;  

                case 'D':  
                    if (cursor < list.size() + 1) {  
                        cursor += 1;  
                    }  
                    break;  

                case 'B':  

                    if(cursor > 1){  
                        list.remove(cursor-2);  
                        cursor -= 1;  
                    }  
                    break;  
            }  
        }  
        list.forEach(System.out::println);
        bw.flush();  
        bw.close();  
    }  
}

ArrayList๋กœ ๊ตฌํ˜„ํ•˜๊ณ , sout์œผ๋กœ ์ถœ๋ ฅํ•˜๋‹ˆ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•ด๋ณด์•˜๋‹ค.

2๋ฒˆ์งธ ์‹œ๋„

import java.io.*;  
import java.util.ArrayList;  
import java.util.List;  
import java.util.Scanner;  

public class ์—๋””ํ„ฐ {  

    public static void main(String[] args) throws IOException {  

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));  
        List<Character> list = new ArrayList<>();  

        String str = br.readLine(); //์ž…๋ ฅ 1๋ฒˆ์ค„์„ ๋ฐ›์•„์˜จ๋‹ค.  

        int cursor = 1; //์ปค์„œ๋ฅผ ์„ ์–ธ  

        for (int i = 0; i < str.length(); i++) {  
            list.add(str.charAt(i)); //๋ฆฌ์ŠคํŠธ์— str์„ ํ•œ๊ธ€์ž์”ฉ ๋„ฃ๋Š”๋‹ค.  
        }  

        cursor = list.size() + 1; //์ปค์„œ์˜ ์œ„์น˜๋ฅผ ์žก๋Š”๋‹ค.  

        int M = Integer.parseInt(br.readLine()); //์ž…๋ ฅํ•  ๋ช…๋ น์–ด์˜ ๊ฐœ์ˆ˜  

        for (int i = 0; i < M; i++) { //๋ช…๋ น์–ด ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต  

            String command = br.readLine();  
            char c = command.charAt(0);  
            switch (c) {  
                case 'P':  
                    char ch = command.charAt(2);  
                    list.add(cursor - 1, ch); //์ปค์„œ๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ ํ•˜๋‹ˆ๊นŒ 1๋นผ์ค€๋‹ค.  
                    cursor += 1;  

                    break;  

                case 'L':  
                    if (cursor > 1) {  
                        cursor -= 1;  
                    }  
                    break;  

                case 'D':  
                    if (cursor < list.size() + 1) {  
                        cursor += 1;  
                    }  
                    break;  

                case 'B':  

                    if(cursor > 1){  
                        list.remove(cursor-2);  
                        cursor -= 1;  
                    }  
                    break;  
            }  
        }  

        for(Character chr : list) {  
            bw.write(chr);  
        }  
        bw.flush();  
        bw.close();  
    }  
}

์ž…์ถœ๋ ฅ ๋ฐฉ์‹์„ BufferedReader / BufferedWriter๋กœ ๋ณ€๊ฒฝ -> ์—๋Ÿฌ ๋ฐœ์ƒ

๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ArrayList์˜ ์‚ฌ์šฉ์ด ๋ฌธ์ œ์ธ๊ฒƒ์ด๋‹ค. ์ด๋ฌธ์ œ๋Š” ์‚ฝ์ž…/ ์‚ญ์ œ์— ๋น ๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ์š”๊ตฌํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ArrayList์˜ ์‚ฌ์šฉ์€ ๋ถˆ๋ฆฌํ•˜๋‹ค.

๋‹ต์„ ์ฒ˜์Œ ์ž‘์„ฑํ–ˆ์„ ๋•Œ, ์ฝ”๋“œ 1์ฒ˜๋Ÿผ ์ž‘์„ฑ์„ ํ–ˆ๋‹ค. ๋ฌธ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ index๊ฐ’์„ ๋ณ€ํ™”์‹œ์ผœ ์ปค์„œ๋ฅผ ์›€์ง์ด๋Š” ์‹์œผ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ฒŒ ๋˜๋ฉด, ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•˜๊ณ  list์•ˆ์—์„œ ์žฌ๋ฐฐ์—ด๋  ๋•Œ O(n)์ด ๋‚˜์˜ค๊ฒŒ ๋˜๊ณ , ์ด๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜๋ฉด O(n^2)๋กœ ์ด ๋ช…๋ น์–ด๊ฐ€ 500,000๊ฐœ ์ด๋ฏ€๋กœ 500,000^2๊ฐ€ ๋˜์–ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

๊ทธ๋ž˜์„œ stringbuilder๋„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ๊ณ„์†ํ•ด์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์™€ ํžŒํŠธ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๊ตฌ๊ธ€๋ง์„ ํ–ˆ๋‹ค.

์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์€ ์™ผ์ชฝ ์Šคํƒ, ์˜ค๋ฅธ์ชฝ ์Šคํƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์Šคํƒ์—์„œ์˜ push, pop์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์ด์–ด์„œ n๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด O(n)์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค.

์†”์งํ•˜๊ฒŒ ํžŒํŠธ๋ฅผ ๋ณด์ง€ ์•Š์•˜๋‹ค๋ฉด ์ด ๋ฌธ์ œ๋Š” ํ’€ ์ˆ˜ ์—†์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์™ผ์ชฝ ์Šคํƒ, ์˜ค๋ฅธ์ชฝ ์Šคํƒ์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์ด ์ •๋ง ๊ธฐ๋ฐœํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , index๊ฐ’์„ ๋ณ€ํ™”์‹œ์ผœ ์ปค์„œ๋ฅผ ์›€์ง์ด๋ฉด O(n)์ด ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋Š”๋ฐ๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค. ๋งˆ์ง€๋ง‰์— StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ ๋ฌธ์ œ๊ฐ€ ๋งž์•˜๋‹ค.

์ด ์ ์„ ๋ณด๊ณ , stringbuilder๊ฐ€ println๋ณด๋‹ค ๋น ๋ฅธ ์ถœ๋ ฅ์„ ํ•˜๊ฒŒ ๋จ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์งˆ๋ฌธ๋“ค๊ณผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํฌ์ŠคํŠธ๋ฅผ ์ฐพ์•„๋ณด์•˜๋‹ค.

์ฒ˜์Œ ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•์—์„œ๋Š” index ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ปค์„œ์˜ ์œ„์น˜๋ฅผ ๋‹ค๋ฃจ์—ˆ๊ณ , L/D/B/P ์‹œ LinkedList๊ฐ€ ์ปค์„œ์˜ ์œ„์น˜, ์ฆ‰ ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๊ณ  ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด์ฒ˜๋Ÿผ ์œ„์น˜๋ฅผ ์ฐพ์•„๊ฐ€์ง€ ๋ง๊ณ  ๋ฌธ์ œ์˜ '์ปค์„œ'์ฒ˜๋Ÿผ ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜์— ๊ณ„์† ์žˆ์œผ๋ฉด์„œ ์‚ฝ์ž…/์‚ญ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๋‹ค.

๊ทธ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ ListIterator์˜ ์‚ฌ์šฉ์ด๋‹ค!

๊ทธ๋ฆฌ๊ณ  LinkedList๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด์œ ๋Š” ์•„๋ž˜์— ์ฒจ๋ถ€ํ•œ๋‹ค

ArrayList์™€ LinkedList์˜ ์ฐจ์ด
https://dev-coco.tistory.com/19

3๋ฒˆ์งธ ์‹œ๋„

package ๊ธฐ์ดˆ1.Day02.์ •ํ•ด์˜;  

import java.io.*;  
import java.util.ArrayList;  
import java.util.LinkedList;  
import java.util.List;  
import java.util.ListIterator;  

public class ์—๋””ํ„ฐ {  

    public static void main(String[] args) throws IOException {  

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));  
        List<Character> list = new LinkedList<>();  

        String str = br.readLine(); //์ž…๋ ฅ 1๋ฒˆ์ค„์„ ๋ฐ›์•„์˜จ๋‹ค.  

        for (int i = 0; i < str.length(); i++) {  
            list.add(str.charAt(i)); //๋ฆฌ์ŠคํŠธ์— str์„ ํ•œ๊ธ€์ž์”ฉ ๋„ฃ๋Š”๋‹ค.  
        }  

        int M = Integer.parseInt(br.readLine()); //์ž…๋ ฅํ•  ๋ช…๋ น์–ด์˜ ๊ฐœ์ˆ˜  

        //iterator๋ฉ”์„œ๋“œ ํ˜ธ์ถœ.  
        ListIterator<Character> iterator = list.listIterator();  

        //์ฒ˜์Œ์— ์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ๋’ค์— ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ปค์„œ๋ฅผ ๋งจ๋’ค๋กœ ์ด๋™์‹œํ‚จ๋‹ค.  
        while (iterator.hasNext()){  
            iterator.next();  
        }  

        for (int i = 0; i < M; i++) { //๋ช…๋ น์–ด ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต  

            String command = br.readLine();  
            char c = command.charAt(0);  
            switch (c) {  
                case 'P':  
                    char ch = command.charAt(2);  
                    iterator.add(ch);  

                    break;  

                case 'L':  
                    if (iterator.hasPrevious()) {  
                        iterator.previous();  
                    }  
                    break;  

                case 'D':  
                    if (iterator.hasNext()) {  
                        iterator.next();  
                    }  
                    break;  

                case 'B':  

                    if(iterator.hasPrevious()){  
                        iterator.previous();  
                        iterator.remove();  
                    }  
                    break;  
            }  
        }  

        for(Character chr : list) {  
            bw.write(chr);  
        }  
        bw.flush();  
        bw.close();  
    }  
}

์„ฑ๊ณต...!

https://minhamina.tistory.com/17
https://hianna.tistory.com/620 ๋ฆฌ์ŠคํŠธ ์ค‘๊ฐ„์— ๊ฐ’์ถ”๊ฐ€
https://st-lab.tistory.com/92?category=830901 ์ž๋ฐ” ์Šค์บ๋„ˆ ํด๋ž˜์Šค https://h-apple11.tistory.com/32
https://st-lab.tistory.com/41 ์ž๋ฐ”์ž…๋ ฅ ๋œฏ์–ด๋ณด๊ธฐ

๋ฐ˜์‘ํ˜•