탐색(1)_체스판(1100)

BJO 1100 체스판

체스판은 8*8 크기다. 하얀 칸과 검정 칸이 번갈아가면서 색칠되어 있다. (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램 작성

이해한 방식

  1. 입력 받을 8*8 체스칸 생성하고 초기화
  2. 하얀칸과 검정칸이 표시된 2차원 리스트 생성
  3. 체스판의 상태 주어지니, 2차원 리스트로 입력 받기
  4. 2와 3 비교해서 갯수 출력

다시 생각해보면 하얀칸과 검정칸이 표시된 2차원 리스트를 만들 필요도 없다. 갯수를 세어줄 때, 인덱스를 조절해서 홀수와 짝수로 나눠 F가 있는지 확인만 해주면 된다.

알게 된 내용

파이썬 코딩 하면서 ,index와 in을 같이 사용할 수는 없을지 궁금했다. 찾아보니 enumerate() 함수가 있었다.

  1. 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/

0%