자기계발
백준
3003 · 킹, 퀸, 룩, 비숍, 나이트, 폰

백준 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만 반환해도 결과가 같다.

출처