본문 바로가기

알고리즘/백준

1195. 킥다운

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

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

 

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

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