문제의 상황을 고려하려면 작은 부분이 큰 부분을 일직선으로 통과하면 된다. 혹은 반대도 가능하지만 나는 작은거를 기준으로 생각했다.
통과하면서 체크를 해주고 조건에 부합하면 길이를 계산해고 조건에 부합하지 않으면 한칸 옮긴다.
한 칸씩 전진하는 것을 그림으로 나타내보면 다음과 같다.
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))
'알고리즘 > 백준' 카테고리의 다른 글
12865. 평범한 배낭 (with 시온) (0) | 2022.06.17 |
---|---|
13334. 철로 (0) | 2022.06.10 |
16968. 배열 복원하기 (0) | 2022.06.04 |
15591. Mootube (0) | 2022.05.01 |
1914. 하노이 탑 (0) | 2022.04.27 |