반응형
문제
길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다.
두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다.
- A의 앞에 아무 알파벳이나 추가한다.
- A의 뒤에 아무 알파벳이나 추가한다.
이때, A와 B의 길이가 같으면서, A와 B의 차이를 최소로 하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. A와 B의 길이는 최대 50이고, A의 길이는 B의 길이보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.
출력
A와 B의 길이가 같으면서, A와 B의 차이를 최소가 되도록 했을 때, 그 차이를 출력하시오.
예제 입력adaabc aababbc |
예제 출력2 |
파이썬 풀이
b의 길이를 a의 크기에 맞게 자른 뒤 비교하는 방식으로 문제를 해결했다.
a,b = input().rstrip().split()
ans = float('inf')
for i in range(len(b)-len(a)+1):
cnt = 0
tmp = b[i:i+len(a)]
for j in range(len(a)):
if a[j]!=tmp[j]:
cnt+=1
ans = min(ans, cnt)
print(ans)
자바 풀이
마찬가지로 substring을 통해 문자열을 슬라이싱한 뒤 비교하는 방식으로 해결했다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String args[]) throws Exception{
BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String a = st.nextToken();
String b = st.nextToken();
int ans = a.length();
for (int i=0; i<b.length()-a.length()+1;i++) {
int cnt = 0;
String tmp = b.substring(i,i+a.length());
for (int j=0;j<a.length();j++) {
if (a.charAt(j)!=tmp.charAt(j)) {
cnt+=1;
}
}
ans = Integer.min(ans,cnt);
}
System.out.println(ans);
}
}
반응형
'알고리즘 연습 > 구현, 문자열' 카테고리의 다른 글
[🥉2 / 백준 2846 / 파이썬] 오르막길 (0) | 2021.11.09 |
---|---|
[🥈3 / 백준 1972 / 파이썬] 놀라운 문자열 (0) | 2021.10.30 |
[🥉1 / 백준 11005 / 파이썬] 진법 변환 2 (0) | 2021.10.18 |
[🥉2 / 백준 10804 / 파이썬] 카드 역배치 (0) | 2021.10.16 |
[🥉2 / 백준 1672 / 파이썬] DNA 해독 (0) | 2021.10.16 |