'알고리즘&자료구조/문자열 처리'에 해당되는 글 2건

  1. 2020.06.21 :: 알고리즘 - 다중 문자열 패턴 검색 알고리즘 아호 코라식(Aho-corasick)
  2. 2018.03.31 :: 문자열 처리 - 명령 프롬프트(백준 1032번)

https://github.com/robert-bor/aho-corasick/tree/master/src/main/java/org/ahocorasick/trie

 

robert-bor/aho-corasick

Java implementation of the Aho-Corasick algorithm for efficient string matching - robert-bor/aho-corasick

github.com

https://www.slideshare.net/ssuser81b91b/ahocorasick-algorithm

 

Aho-Corasick Algorithm(아호 코라식 알고리즘)

Aho-Corasick Algorithm 장홍준 hongjun7@korea.ac.kr

www.slideshare.net

 

posted by 여성게
:

1. 문자열 처리 - 명령 프롬프트(백준 1032번)






2.문제 풀이


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package _317324;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
 
public class Baekjoon1032Cmd {
    static String[] strArr;
    static int count;
    static String str="";
    static boolean isSame=true;
    public static void main(String[] args) throws NumberFormatException, IOException {
        // TODO Auto-generated method stub
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        
        int n=Integer.parseInt(br.readLine().trim());
        strArr=new String[n];
        
        for(int i=0;i<n;i++) {
            strArr[i]=br.readLine();
        }
        for(int i=0;i<strArr[0].length();i++) {
            for(int j=1;j<n;j++) {
                if(strArr[0].charAt(i)==strArr[j].charAt(i)) {
                    isSame=true;
                }else {
                    isSame=false;
                    break;
                }
            }
            if(isSame==false) {
                str+="?";
            }else {
                str+=strArr[0].charAt(i);
            }
        }
        System.out.println(str);
        br.close();
    }
 
}
 
cs



이 문제는 간단히 주어진 모든 문자열에서 같은 위치에 같은 문자를 갖는 다면 그 문자를 그대로, 만약 하나의 문자열이라도 그 위치의 문자가 다르다면 '?'를 출력하는 문제이다. 물론 위의 코드보다 더욱 효율적인 코드는 있겠지만 실행이 되는 코드이고 코드를 직관적으로 분석하기 편하다. 모든 문자열의 길이는 같으므로(문제풀기가 수월한 이유이다.) 첫번째 배열의 문자열을 기준으로 하여 그 외의 모든 문자열을 반복문으로 불러와서 각 위치의 문자가 같은지만 비교하면 된다. 만약 같다면 그 문자를 스트링에 넣고 만약 한 글자라도 다르다면 isSame에 false가 들어가 바로 반복문을 벗어나 str에 '?'를 넣게 된다. 이렇게 문자열의 길이만큼 반복문을 실행하면 되는 것이다.

posted by 여성게
: