[백준 | 파이썬] 1120 : 문자열

devheyrin·2022년 3월 1일
0

codingtest

목록 보기
26/65
💡 입력들이 다양해서 여러 가지 조건을 고려하며 풀 수 있었던 문제!

문제

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

두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제 A의 길이가 B의 길이와 같아질 때 까지 다음과 같은 연산을 할 수 있다.

  1. A의 앞에 아무 알파벳이나 추가한다.
  2. A의 뒤에 아무 알파벳이나 추가한다.

이때, A와 B의 길이가 같으면서, A와 B의 차이를 최소로 하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. A와 B의 길이는 최대 50이고, A의 길이는 B의 길이보다 작거나 같고, 알파벳 소문자로만 이루어져 있다.

출력

A와 B의 길이가 같으면서, A와 B의 차이를 최소가 되도록 했을 때, 그 차이를 출력하시오.

풀이 방법

처음 문제를 접했을 때는 앞에만 추가하거나 뒤에만 추가하는 두 가지 방법만 있을 거라고 생각해서, 두 경우의 문자열 차이를 구하고 둘 중 작은 수를 리턴하면 된다고 생각했다.

그런데 입력 예시를 보니 앞과 뒤 모두에 추가되는 경우도 있었다.

그렇다면 긴 문자열 중에서 짧은 문자열만큼의 길이를 잘라낸 뒤, 잘라낸 문자열과 짧은 문자열의 차이를 비교해서 최솟값을 리턴하면 된다.

idx 를 증가시키면서 긴 문자열을 자르는 인덱스로 활용했다.

코드

A, B = input().split()
a, b = len(A), len(B)

idx = 0
min_cnt = []
while idx < b-a+1:
    B_temp = B[idx:idx + a]
    cnt = 0
    for i in range(a):
        if A[i] != B_temp[i]:
            cnt += 1
    idx += 1
    min_cnt.append(cnt)
    
print(min(min_cnt))

골드 문제는 아직 어렵지만 실버는 도전해볼 수 있을 것 같다!!!

화이팅~~~!!

profile
개발자 헤이린

0개의 댓글