상세 컨텐츠

본문 제목

백준#1120 - 문자열

C#/알고리즘

by McRobbin 2020. 4. 11. 18:19

본문

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

그리디 알고리즘으로 분류된 문자열 문제 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _1120
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] splitInput = Console.ReadLine().Split(' ');
            string A = splitInput[0];
            string B = splitInput[1];
 
            Program p = new Program();
            int diff = B.Length;
 
            for(int i = 0; i < B.Length - A.Length + 1; i++)
            {
                if (p.GetStringDiff(A, B.Substring(i, A.Length)) < diff)
                    diff = p.GetStringDiff(A, B.Substring(i, A.Length));
            }
 
            Console.WriteLine(diff);
        }
 
        public int GetStringDiff(string a, string b)
        {
            int count = 0;
            for(int i = 0; i < a.Length; i++)
            {
                if (a[i] != b[i])
                    count++;
            }
            return count;
        }
    }
}
 
 
 

처음 볼것은 GetStringDIff입니다. string A와 Substring B를 비교할 것인데 둘의 각 문자를 보고

다르다면 카운트를 하나씩 늘려 차이를 반환받습니다.

 

다음 main에서 길이를 비교합니다. 비교의 차이 + 1 만큼 반복합니다.

a의 길이가 3이고 b의 길이가 5라면 B.Substring(0, 3)부터 B.Substring(2, 5)까지 차례대로 가져와

그 GetStringDiff를 구합니다. 그 중 가장 작은것을 가지고 있다가 출력 했습니다.

 

A의 길이가 B보다 작은 경우 이를 고려하지 않아도 됩니다.

ex) A : abc, B : aabcd일 경우 => B의 a abc d 처럼 B의 Substring중 차이가 가장 작은 부분을 반환

받을 것이며 A에 추가하는 것은 당연히 B와 같아지도록 앞의 a, 마지막에 d를 추가할 것입니다. A가

B의 Substring중 그 차이가 가장 작은 부분을 찾을 수 있다면 나머지 길이를 맞추는 과정은 추가하는

모든 문자가 B와 같아지도록 한다는 것을 알 수 있습니다.

'C# > 알고리즘' 카테고리의 다른 글

백준#1049 - 기타줄  (0) 2020.04.12
백준#1946 - 신입 사원  (0) 2020.04.12
백준#1541 - 잃어버린 괄호  (0) 2020.04.11
백준#2875 - 대회 or 인턴  (0) 2020.04.11
백준#10610 - 30  (0) 2020.04.10

관련글 더보기