문제.
동혁이는 오래된 창고를 뒤지다가 낡은 체스판과 피스를 발견했다. 체스판의 먼지를 털어내고 걸레로 닦으니 그럭저럭 쓸만한 체스판이 되었다. 하지만, 검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다. 체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다. 동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오.
쉽게 말해 입력숫자 6개가
1 1 2 2 2 8 로 되도록 하기 위해 필요한 숫자를 구하는 문제다.
예를 들어
입력이
0 1 2 2 2 7 이면
1 1 2 2 2 8 이 되기 위해
1 0 0 0 0 1 이 출력 되는 것이다.
입력과 출력값을 더해 1 1 2 2 2 8이 되게 하기 위해서는
1 1 2 2 2 8을 입력값에서 빼주면 된다.
풀이.
n = [1,1,2,2,2,8]
l = list(map(int,input().split()))
c = [n-l for n,l in zip(n,l)]
print(*c)
리스트의 크기를 6개로 고정할 수 있어서 1,1,2,2,2,8을 n이라는 리스트로 지정했다.
그리고 입력 받은 값을 리스트 형태로 저장하도록 l을 지정했다.
다음엔 이 두 리스트를 각 요소마다 한꺼번에 빼기를 해야했다.
for문을 돌려 리스트 안의 요소를 빼내어 빼기를 진행해야 되나 싶었는데
구글링을 통해 zip 함수를 발견하게 됐다.
* zip함수
:동일 개수로 이루어진 자료형 묶어주는 함수
for문을 돌려 두 리스트를 모두 연 다음 zip함수로 자료를 묶는 동시에 계산 진행한다.
그렇게 진행한 게 리스트 c이다.
마지막으론 최종 출력 값이 저장된 리스트 c를 출력하면 됐다.
처음엔 for문을 돌려 리스트를 출력해야 되나 싶었지만 이 방법을 찾을 수 있었다.
위의 링크에 있는 unpacking은 리스트를 [1,2,3,4,5] 형태 없이 요소들만 한줄로 출력하는 방법이다.
방법은 간단했는데 print(c)에서 c 앞에 *만 붙여주면 된다.
print(*c)
이렇게 해서 문제를 풀어볼 수 있었다.
문제 내용은 단순했지만 그 과정에서 python 내장 함수에 대해 알아볼 수 있어서 유익한 시간이었다.