본문 바로가기

카테고리 없음

[백준 2879번] 코딩은 예쁘게 (Python3)

import sys
input = sys.stdin.readline

N = int(input())

data = [*map(int,input().split())]
make = [*map(int,input().split())]

for i in range(N):
  data[i] -= make[i]

cnt = 0
for i in range(N):
  if data[i] == 0:
    continue
  if data[i] > 0:
    x = 1
  else:
    x = -1
  while data[i] != 0:
    cnt += 1
    for j in range(i,N):
      if data[j]*x <= 0:
        break
      data[j] -= x

print(cnt)

 

처음에는 해결법이 한번에 안떠올랐는데, 조금만 고민해보니까 쉽게 해답이 나왔다.

가장 중요한건 한번에 다 처리하든 나눠서 처리하든 횟수가 똑같다는 것이다.

 

설명을 보태면 만약 11011을 00000으로 만들어주어야 한다고 할 때, 11011 >> 00-100 >> 00000 으로 처리하는 방법과, 11011 >> 00011 >> 00000 으로 처리하는 방법이 필요한 명령횟수가 똑같다는 것이다.

 

따라서 그냥 맨 앞에서부터 + 끼리 묶어서 처리, -끼리 묶어서 처리하면 쉽게 정답을 구할 수 있다.

 

 

오늘의 교훈) 의외로 해결법이 간단할 수 있다.