10
03

 

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

 

1543๋ฒˆ: ๋ฌธ์„œ ๊ฒ€์ƒ‰

์„ธ์ค€์ด๋Š” ์˜์–ด๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์–ด๋–ค ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์–ด๋–ค ๋‹จ์–ด๊ฐ€ ์ด ๋ช‡ ๋ฒˆ ๋“ฑ์žฅํ•˜๋Š”์ง€ ์„ธ๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์„ธ์ค€์ด์˜ ํ•จ์ˆ˜๋Š” ์ค‘๋ณต๋˜์–ด ์„ธ๋Š” ๊ฒƒ์€ ๋นผ๊ณ  ์„ธ์•ผ ํ•œ

www.acmicpc.net

import java.io.*;

class Main{
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] doc = br.readLine().toCharArray();
        char[] target = br.readLine().toCharArray();
        int targetLen = target.length;
        int result = 0;
        boolean match = false;
        for(int i=0; i<doc.length; i++){
            if(doc[i] == target[0] && i + targetLen-1 <= doc.length){
                for(int j=0; j<targetLen; j++){
                    match = target[j] == doc[i + j];
                }
                if(match){
                    result++;
                    i += targetLen -1;
                }
            }
        }

        System.out.println(result);
    }
}

์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

ํƒ€๊ฒŸ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ, doc ๋ฌธ์ž์—ด์„ char ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์„œ ์ด์ค‘ ํฌ๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค. target๊ณผ ๋™์ผํ•˜๋ฉด result ๊ฐ’์„ ํ•˜๋‚˜ ๋”ํ•˜๊ณ , ์ปค์„œ ์—ญํ• ์„ ํ•˜๋Š” i๋ฅผ ํ˜„์žฌ ํƒ€๊ฒŸ ๋ฌธ์ž์—ด ๊ธธ์ด ๋งŒํผ ๋”ํ•ด์ค€๋‹ค. ์˜ˆ์ œ๋Š” ํ•œ๊ฐœ ๋นผ๊ณ  ๋‹ค ํ†ต๊ณผ๋๊ณ , targetLen - 1 ์„ i์— ๋„ฃ์–ด์ฃผ๋‹ˆ ๋ชจ๋“  ์˜ˆ์ œ๋ฅผ ํ†ต๊ณผ ํ–ˆ๋‹ค. 

๋ฌด์—‡์ด ๋ฌธ์ œ์˜€์„๊นŒ?


์ •๋‹ต์ฝ”๋“œ

import java.io.*;

class Main{
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String doc = br.readLine();
        String target = br.readLine();
        int startIndex = 0;
        int count = 0;
        while (true) {
            int idx = doc.indexOf(target, startIndex);
            if (idx < 0)
                break;
            startIndex = idx + target.length();
            count++;
        }
        System.out.println(count);
    }
}

String์ด ๊ฐ–๋Š” ๋ฉ”์„œ๋“œ์ธ indexOf๋ฅผ ์ด์šฉํ•ด์„œ char ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. indexOf์— ์ฐพ์„ ๋ฌธ์ž์—ด์„ ๋„ฃ๊ณ , ์‹œ์ž‘์ง€์ ์„ ์ง€์ •ํ•œ๋‹ค. ๋ฌธ์ž์—ด์„ ์ฐพ์•˜์œผ๋ฉด ์‹œ์ž‘์ง€์  ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. while์„ ์‚ฌ์šฉํ•จ์— ๋”ฐ๋ผ for๋ฅผ ์“ธ ๋•Œ i++๋•Œ๋ฌธ์— +1์„ ํ•ด์ฃผ๋˜ ์ž‘์—…๋„ ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๋กœ์ง์€ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค๋Š” ์ ์ด ์œ„์•ˆ์ด ๋๋‹ค.

 

๋‹ค๋ฅธ ํŠธ๋ฆญ์œผ๋กœ๋Š” 

String result = doc.replace(target, "x");

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋Œ€์ƒ ๋‹จ์–ด๊ฐ€ x๋กœ ๋ฐ”๋€Œ์–ด์„œ x์˜ ๋นˆ๋„๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค. ๋ฌธ์ž์—ด ๋‚ด์˜ ํŠน์ • ๋ฌธ์ž ๋นˆ๋„๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฒŒ ๋˜๋‚˜ ํ•ด์„œ ์ฐพ์•„๋ดค๋Š”๋ฐ Collections.frequency() ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ–ˆ๋‹ค. ์ด๋Ÿฌ๋ฉด string์„ ๋˜ char array๋กœ ๋ฐ”๊ฟ”์•ผํ•˜๋‹ˆ๊นŒ ๋น„ํšจ์œจ์ ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

"๋Œ“๊ธ€, ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์‹œ๋ฉด ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค"

 

๋ฐ˜์‘ํ˜•
COMMENT