잘못 생각한 것) 문자열의 포함 여부로 문제를 풀 생각한 것.
A의 문자열에서 한 개씩 빼며, B 문자열 포함 여부를 확인하고,
포함된 것을 확인했으면 B 문자열의 어디서부터 포함 시작(trigger)
인지 가져오기.
trigger부터 한 칸씩 -를 하면서 A 문자열과 비교해나가기(A 문자열의 끝까지)
조건 : trigger >= 0
잘못 생각한 코드)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bfr.readLine());
char[] A = st.nextToken().toCharArray();
String B = st.nextToken();
int aLength = A.length;
int bLength = B.length();
int i = 0;
int trigger = 0;
int point = 0;
int count = 0;
boolean result = true;
StringBuilder sb = new StringBuilder();
if (aLength < bLength) {
while (true) {
for (; i < aLength; i++) {
sb.append(A[i]);
}
if ((trigger = B.indexOf(sb.toString())) > -1) {
for (int k = point; k >= 0; k--) {
if (trigger >= 0 && A[k] != B.charAt(trigger--))
count++;
}
break;
}
i = (++point);
sb.delete(0, sb.length());
}
} else {
for (int j = 0; j < aLength; j++) {
if (A[j] != B.charAt(j))
count++;
}
}
if(result)
System.out.println(count);
else
System.out.println(aLength);
bfr.close();
}
}
생각하면 할수록 조건이 복잡해져서 이 풀이는 아닌 것 같아 다른 아이디어로 풀어보기로 했습니다.
불현듯 스쳐지나가는, 이전 코드의 A 문자열 한 칸씩 증가시키며 포함 확인하기.
A 문자열은 그대로 두고, 어차피 A.length <= B.length이므로
B 문자열에서 idx를 한 칸씩 증가시키며 A와 모든 문자열을 를 확인해보고(어차피 최대 길이 50) 그중 가장 작은 값을 출력시키면 되지 않을까?라고 생각해봤습니다.
문제에서 앞뒤 문자열 추가는 페이크라고 생각하여 애초에 별 생각하지 않았습니다.
여기서 조건은 B 문자열의 남은 길이가 A의 남은 길이보다는 크거나 같아야 한다는 것입니다.
A 문자열 전체와 B 문자열의 [0] ~ A.length-1까지 비교, 서로 다른 문자의 개수 저장
A 문자열 전체와 B 문자열의 [1] ~ A.length-1까지 비교, 이전 값과 비교 후 더 작은 값 저장
...
A 문자열 전체와 B 문자열의 [B.length - A.length] ~ A.length-1까지 비교, 이전 값과 비교 후 더 작은 값 저장
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bfr.readLine());
char[] A = st.nextToken().toCharArray();
String B = st.nextToken();
int aLength = A.length;
int bLength = B.length();
int count = 0;
int min = 999;
for (int i = 0; bLength - i >= aLength; i++) {
for (int j = 0; j < aLength; j++) {
if (A[j] != B.charAt(i + j))
count++;
}
if(min > count)
min = count;
count = 0;
}
System.out.println(min);
bfr.close();
}
}