[백준] 1120 : 문자열 C++

거북이·2022년 3월 16일
0

문제풀이

목록 보기
2/11

문제 링크


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

문제 풀이


입력으로 주어지는 문자열의 길이가 같을 경우 단순하게 차이를 출력하고, 문자열이 다를 경우 문자열x를 문자열y의 첫번째 인덱스부터 증가시키면서 문자열을 비교하여 같은 문자가 가장 많을때의 인덱스를 찾아 저장한 후 이를 이용하여 새로운 문자열을 만든 후 다시 비교하는 방식으로 문제를 풀었다.

  • 새로운 문자열 z를 y의 size만큼 생성 후 초기화
  • 문자열 x,y를 비교하여 가장 많이 겹쳤을때의 index값을 저장
  • replace 함수를 이용하여 z의 해당 index에 x로 대체
  • 차이를 최소화 하기위해 나머지 부분은 y의 값으로 대체

정답 코드


#include<iostream>
#include<string>

using namespace std;



// 두 문자열의 차이를 출력하는 함수 
void printDiffrentAlp(string x, string y) {
	int count = 0; 
	for (int i = 0; i < x.size(); i++) {
		if (x[i] != y[i]) {
			count++;
		}
	}
	cout << count;
}

int main() {
	string x;
	string y;
	string z;

	cin >> x >> y; 

	//문자열 z 초기화
	for (int i = 0; i < y.size(); i++) {
		z.push_back(' ');
	}

	//문자열 x와 y의 크기가 같은 경우 차이를 출력
	if (x.size() == y.size()) {
		printDiffrentAlp(x,y);
	}
	//크기가 달라 문자열 x에 알파벳을 추가해야하는 경우 
	else {
		int index = 0; 
		int max = 0; 
		//x와 y 비교
		for (int i = 0; i < y.size()-x.size()+1; i++) {
			int countSameAlp = 0; //같은 문자를 count
			for (int j = 0; j < x.size(); j++) {
				if (x[j] == y[i+j]) {
					countSameAlp++;
				}
			}
			if (max < countSameAlp) {
				max = countSameAlp;
				index = i;
			}
		}
		z.replace(index,x.size(),x); // 해당 인덱스로부터 x의 크기만큼 문자열x로 대체

		//나머지 값은 y의 문자열에 맞춰준다.
		for (int i = 0; i < y.size(); i++) {
			if (z[i] == ' ') {
				z[i] = y[i];
			}
		}
		//y와 문자열 z의 차이 출력
		printDiffrentAlp(z, y);



	}
	return 0;
}

0개의 댓글

관련 채용 정보