백준 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰
문제
체스 한 세트는 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성된다. 동혁이가 찾은 흰색 피스의 개수가 킹, 퀸, 룩, 비숍, 나이트, 폰 순서로 주어지면(각각 0 이상 10 이하) 올바른 세트가 되기 위해 더하거나 빼야 할 개수를 같은 순서로 출력한다. 양수는 더해야 하는 개수, 음수는 제거해야 하는 개수다. 예를 들어 0 1 2 2 2 7이면 1 0 0 0 0 1이다.
풀이
피스별 기준 개수를 변수로 두고, 입력값이 기준과 다르면 기준 - 입력을, 같으면 0을 반환하는 함수를 만든다. 이 함수를 여섯 개 값에 각각 적용해 출력한다.
여러 값을 한 번에 입력받는 방법이 바로 떠오르지 않아 검색했고, map에 split을 함께 써서 한 줄의 입력을 정수로 나눠 받았다.
king = 1
queen = 1
rook = 2
bishop = 2
knight = 2
pawn = 8
def get_diff(n, chess):
if n != chess:
result = chess - n
return result
else:
return 0
def chess(k, q, r, b, kn, p):
k_ = get_diff(k, king)
q_ = get_diff(q, queen)
r_ = get_diff(r, rook)
b_ = get_diff(b, bishop)
kn_ = get_diff(kn, knight)
p_ = get_diff(p, pawn)
return k_, q_, r_, b_, kn_, p_
a,b,c,d,e,f = map(int, input().split())
a_, b_, c_, d_, e_, f_ = chess(a, b, c, d, e, f)
print(a_, b_, c_, d_, e_, f_)짚고 갈 점
get_diff는 두 값이 같을 때chess - n이 0이므로if로 나누지 않고chess - n만 반환해도 결과가 같다.