메이쁘

(JAVA) 백준 1120번 : 문자열 본문

Algorithm/Baekjoon

(JAVA) 백준 1120번 : 문자열

메이쁘 2020. 2. 23. 20:29

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

 

1120번: 문자열

길이가 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의 길이가 같으

www.acmicpc.net

 

 

문자열 처리 분류 문제.

 

두 문자열 A와 B의 length를 구한 다음

 

0부터 B.length - A.length 까지 for문 진행. 이 때의 0 ~ B.length - A.length는 문자열 B의 시작 인덱스를 나타낸다.

위 for문 안에 0 ~ A.length 까지 for문 진행. 이 때의 0 ~ A.length - 1는 문자열 A의 시작 인덱스를 나타낸다.

 

String.charAt(index) 를 통해 A, B의 문자를 하나씩 꺼내 비교해서 다르면 count + 1을 한다.

 

모든 for문을 통해 count가 가장 최소인 값을 출력하면 된다.

** 각 경우에 따라 나온 count값 중 최소인 값을 얻는 방식은 두 가지가 있다.

** 1) ArrayList에 다 넣고 진행

** 2) min 변수를 하나 만들어서 Math.min을 통해 min값 갱신

** 다른 개발자 코드는 2)를 사용했지만, 1)과 2)를 돌려본 결과 시간은 동일하게 나왔다..

 

 

소스코드


package string;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 문자열 처리 문제
// 문자열
// 문자 하나씩 인덱스 비교
public class p1120 {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		String a = st.nextToken();
		String b = st.nextToken();
		
		int aLen = a.length();
		int bLen = b.length();
		
		// 1) ArrayList에 다 넣고 진행
		// 2) min 변수를 하나 만들어서 경우 하나씩 비교해서 최솟 값(min) 갱신
//		ArrayList<Integer> list = new ArrayList<Integer>();
		int min = Integer.MAX_VALUE;
		for(int i = 0; i <= bLen - aLen; i++) {	// b의 인덱스
			int count = 0;
			for(int j = 0; j < aLen; j++) {	// a의 인덱스
				char aChar = a.charAt(j);
				char bChar = b.charAt(i + j);
				if(aChar != bChar) {
					count++;
				}
				if(min < count) {
					break;
				}
			}
			min = Math.min(min, count);
//			list.add(count);
		}
//		Collections.sort(list);
		System.out.println(min);
	}
}
Comments