본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 문자열 1120 (javascript, c++)

by Cafe Mocha 2022. 6. 9.

1120번: 문자열 (acmicpc.net)

 

1120번: 문자열

길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의

www.acmicpc.net


접근 방법

aababbc

adaabc
차이 : 3개

 

aababbc

  adaabc

차이 : 2개

 

양 옆으로 a와 b의 길이 차이 만큼 추가할 수 있기 때문에 추가하기 전의 최소값은 추가한 이후의 최소값과 동일하다.


Javascript

function solution() {
  let input = require("fs")
    .readFileSync("input.txt") //"/dev/stdin"
    .toString()
    .trim()
    .split(" ")
    .map((val) => val.trim());

  let [a, b] = input;
  let a_len = a.length;
  let b_len = b.length;
  let def = b_len - a_len;
  let ans = [];

  for (let i = 0; i <= def; i++) {
    let min = 0;
    for (let j = i; j < i + a_len; j++) {
      if (a[j - i] !== b[j]) min++;
    }
    ans.push(min);
  }

  console.log(Math.min(...ans));
}

solution();

 


C++

#include <bits/stdc++.h>
using namespace std;

int main()
{
	freopen("input.txt", "r", stdin);
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
	
	string a,b;

	cin>>a>>b;

	int a_len = a.length();
	int b_len = b.length();
	int def = b_len-a_len;
	vector<int> v_min;

	for(int i=0;i<=def;i++){
		int min=0;
		for(int j=i;j<i+a_len;j++){
			if(a[j-i]!=b[j]) min++;
		}
		v_min.push_back(min);
	}

	int ans = *min_element(v_min.begin(),v_min.end());

	cout<<ans<<"\n";


	return 0;
}

접근 방법만 인지하면 쉽게 구현할 수 있는 문제였다.