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
        }
    }
}

+ Recent posts