알고리즘/백준

1195. 킥다운

현진이에오 2022. 6. 9. 01:12

문제의 상황을 고려하려면 작은 부분이 큰 부분을 일직선으로 통과하면 된다. 혹은 반대도 가능하지만 나는 작은거를 기준으로 생각했다.

통과하면서 체크를 해주고 조건에 부합하면 길이를 계산해고 조건에 부합하지 않으면 한칸 옮긴다.

 

한 칸씩 전진하는 것을 그림으로 나타내보면 다음과 같다.

a 배열과 b배열의 숫자의 합이 3이하가 된다면 두개를 조립할 수 있으므로 조건에 부합한다. 이를 바탕으로 코드를 작성하면 다음과 같다.

 

a = input()
a = [int(i) for i in a]
b = input()
b = [int(i) for i in b]
ans = []
if len(a) < len(b):
  a, b = b, a
for i in range(len(a) + len(b) + 1):
  c = [0] * (len(b)) + a + [0] * (len(b))
  for j in range(len(b)):
    c[i+j] += b[j]
  if max(c) <= 3:
    x = ''.join(str(s) for s in c)
    ans.append(len(x.strip('0')))
print(min(ans))