#유형 : 시뮬레이션, 그리디

# 맨 처음에는 DFS 방식으로 접근했으나 메모리 초과. 결국은 그리디 방법으로 해결하였다. 

# 양 끝에 붙이는 알파벳은 Y의 양끝과 동일하게 맞추는게 최소값을 구할 수 있는 방법인것같다. X와 Y의 길이 차이를 구하고, 그 차이 만큼 반복문을 돌리며 X,Y 문자를 비교하며 가장 차이가 적을때의 값을 출력하면 된다.

 

예를 들어 adaabc / aababbc 일 때 아래와 같이 나타낼 수 있고,  아래의 경우에 X에 a를 붙이면 최솟값이라는 것을 확인할 수 있다.

X a d a a b c
Y a a b a b b

 

X a d a a b c
Y a b a b b c

 

 

 

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
package bj;
 
 
public class p1120 {
    static String X,Y;
    public static void main(String[] args) throws IOException {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
 
        X = st.nextToken();
        Y = st.nextToken();
 
        int rs = getDiff(X, Y);
        System.out.println(rs);
        
    }
    public static int getDiff(String x, String y) {
        int min = 99999;
        for(int i=0; i<=y.length()-x.length(); i++) {
            int cnt=0;
            for(int j=0; j<x.length(); j++) {
                if(x.charAt(j) != y.charAt(j+i)) {
                    cnt++;
                }
            }
            min = Math.min(min, cnt);
        }
        return min;
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

+ Recent posts