본문 바로가기

# Coding/# 백준

[백준 / 1120] 문자열 - Python

728x90
반응형

<풀이>

앞뒤로 원하는 문자를 추가할 수 있다는 것은 추가된 문자는 무조건 차이가 없다는 것이다. 즉 A문자열을 B에 비교하면서 차이가 없는 위치를 찾아 그 차이를 출력하면 된다.

<입력과 선언>

A, B = map(str, input().split())

str_gap = len(B)-len(A)
min_gap = len(A)

 

문자열 A와 B를 입력받고 두 문자열 길이의 차이를 str_gap에 넣고, 정답을 담을 변수를 min_gap으로 선언하고 len(A)로 초기화 한다. 왜냐하면 A와 B의 차이는 아무리 커야 A이기 때문이다.

<비교>

for i in range(str_gap+1):
    dif = difOf(A, B[i:i+len(A)])

    if dif < min_gap:
        min_gap = dif

print(min_gap)

 

만약 문자열이 A는 'abc', B는 'oooabcooo'라면 A를 ooo, ooa, oab, abc, bco, coo, ooo순서로 비교하기 위해서 두 문자열의 차이 + 1만큼 반복해준다. 위의 경우 3글자 A와 9글자 B를 비교할 때 총 7번 비교한다.

 

difOf함수에서는 두 문자열의 다른 문자의 개수를 반환해준다. dif에 저장하고, min_gap보다 dif의 값이 작으면 min_gap의 값을 갱신해준다.

 

최소값 min_gap을 출력한다.

<함수>

def difOf(str1, str2):
    count = 0
    for i in range(len(str1)):
        if str1[i] != str2[i]:
            count += 1
    return count

 

 

두 문자열, str1과 str2의 문자열 길이는 같으므로 하나씩 문자를 비교하면서 다르면 count를 1 증가시키고 count를 반환한다.

 

<전체 코드>

def difOf(str1, str2):
    count = 0
    for i in range(len(str1)):
        if str1[i] != str2[i]:
            count += 1
    return count


A, B = map(str, input().split())

str_gap = len(B)-len(A)
min_gap = len(A)

for i in range(str_gap+1):
    dif = difOf(A, B[i:i+len(A)])

    if dif < min_gap:
        min_gap = dif

print(min_gap)
728x90
반응형