BJO 1100 체스판
체스판은 8*8 크기다. 하얀 칸과 검정 칸이 번갈아가면서 색칠되어 있다. (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램 작성
이해한 방식
- 입력 받을 8*8 체스칸 생성하고 초기화
- 하얀칸과 검정칸이 표시된 2차원 리스트 생성
- 체스판의 상태 주어지니, 2차원 리스트로 입력 받기
- 2와 3 비교해서 갯수 출력
다시 생각해보면 하얀칸과 검정칸이 표시된 2차원 리스트를 만들 필요도 없다. 갯수를 세어줄 때, 인덱스를 조절해서 홀수와 짝수로 나눠 F가 있는지 확인만 해주면 된다.
알게 된 내용
파이썬 코딩 하면서 ,index와 in을 같이 사용할 수는 없을지 궁금했다. 찾아보니 enumerate() 함수가 있었다.
- enumerate() 내장 함수 예시
arr = [2,7,10]
for idx, val in enumerate(arr):
print(idx,val)
# output
# 0 2
# 1 7
# 2 10
순서가 있는 자료형을 첫 번째 인자로 받아서 각각의 index 값과 value 값들을 enumerate 객체로 리턴한다.
my_list = ['apple', 'banana', 'grapse']
counter_list = list(enumerate(my_list)]
print(counter_list)
# output : [(0,'apple'), (1,'banana'), (2,'grapes')]
추가적으로 두 번째 인자로 정수를 전달하면, 시작하는 index 값을 조정할 수도 있다.
arr = [2,7,10]
for idx,val in enumerate(arr,5):
print(idx,val)
# output:
# 5 2
# 6 7
# 7 10
답안
import sys
arr = [list(sys.stdin.readline().rstrip()) for i in range(8)]
result = 0
for i, row in enumerate(arr):
for j, col in enumerate(row):
if(i % 2 == 0 and j % 2 == 0 and col == 'F'): # 행이 짝수일 때,
result += 1
elif(i % 2 == 1 and j % 2 == 1 and col == 'F'): # 행이 홀수일 때
result += 1
else:
continue
print(result)
위에거나 아래거나 똑같다
import sys
arr = [list(sys.stdin.readline().rstrip()) for i in range(8)]
result = 0
for i, row in enumerate(arr):
for j, col in enumerate(row):
if(i % 2 == 0): # 행이 짝수일 때,
if(j % 2 == 0 and col == 'F'): # 짝수에 말이 있으면 말이 있으면
result += 1
else: # 행이 홀수일 때
if(j % 2 == 1 and col == 'F'): # 홀수에 말이 있으면
result += 1
print(result)
참고자료 [enumerate]https://cjh5414.github.io/python-for-index/