https://www.acmicpc.net/problem/1120
두 개의 문자열의 인덱스를 1:1로 비교하여 차이를 비교하는 문제이고 a 문자열이 b문자열의 어느 인덱스값 부터 1:1 대조되었을 때 최소로 차이가 발생하는지 확인하여 그 최소값을 출력하는 문제이다. b.Length -a.Length 만큼 a 문자열의 앞뒤로 새 문자열을 추가한다는 조건이 있어 문제 풀이에 혼동을 주는데 어차피 원하는 문자열을 삽입할 수 있기 때문에 이 부분은 고려하지 않아도 된다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _230113
{
class Program
{
static void Main(string[] args)
{
string[] arr = {
"adaabc aababbc",
"hello xello",
"koder topcoder",
"abc topabcoder",
"giorgi igroig"
};
//여기부터 작성 하세요
string input = Console.ReadLine();
string[] words = input.Split(' ');
string a = words[0];
string b = words[1];
Console.WriteLine("{0} \n{1}", a, b);
List<int> cnts = new List<int>(); //문자열을 비교하여 값이 다를 때마다 카운트를 하고 그 횟수를 List에 저장
for (int i = 0; i < b.Length - a.Length + 1; i++) //두 문자열의 인덱스 차이의 +1만큼 순회하며 검사
{
int cnt = 0; //두 문자열 같지 않을 때마다 카운트
for (int j = 0; j < a.Length; j++) // a 문자열의 횟수만큼 순회하여 검사
{
if (a[j] != b[j + i]) //2중 for문 중 바깥쪽 for문의 i 가 +1 될때마다 a문자열의 인덱스는 b문자열의 +1번째와 1:1 검사
{
cnt++;
}
if (j == a.Length - 1) //검사가 끝나면 cnt 횟수를 List에 추가(else if를 사용하면 a문자열의 마지막 문자가 b의 문자열과 같지 않을 때 실행되지 않음)
{
cnts.Add(cnt);
}
}
}
Console.WriteLine(cnts.Min()); //List의 최소값을 반환
//출력
//2
//1
//1
//0
//6
}
}
}
'Algorithm > BOJ' 카테고리의 다른 글
C# [BOJ] 11720 숫자의 합 (0) | 2023.01.15 |
---|---|
C# [BOJ] 10988 팰린드롬 (0) | 2023.01.15 |
C# 문자열) [BOJ] 1181 단어 정렬 (0) | 2023.01.12 |
C# 문자열)[BOJ] 10173 니모를 찾아서 (0) | 2023.01.12 |
C# 문자열)[BOJ] 4458 첫 글자를 대문자로 (0) | 2023.01.12 |