알고리즘/백준
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))