문제
체스판은 8*8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 8개의 줄에 체스판의 상태가 주어진다. ‘.’은 빈 칸이고, ‘F’는 위에 말이 있는 칸이다.
출력
첫째 줄에 문제의 정답을 출력한다.
예제 입력 1
.F.F...F
F...F.F.
...F.F.F
F.F...F.
.F...F..
F...F.F.
.F.F.F.F
..FF..F.
예제 출력 1
1
알고리즘 분류
풀이 과정
나는 이 문제를 처음 풀었을 때 조금 헤매었다.
"검정 칸과 하얀 칸이 번갈아가면서 색칠되어있다."는 것을 아래 그림과 같이 이해했었기 때문이다.
근데 알고보니 아래의 그림과 같은 모습을 이야기한 것이었다.
그리고 구글링 하다 아래와 같은 사실을 알아내었는데,
흰 색 부분의 i, j 좌표를 더하면 항상 0 혹은 짝수가 된다는 점이었다.
따라서 i+j가 짝수일 때~ 이렇게 푼 사람이 있었다.
자세한 코드는 아래 링크를 클릭!
나의 풀이
import sys
# 8*8의 input값을 받아줍니다.
matrix = [list(sys.stdin.readline()) for _ in range(8)]
# F를 세어줄 cnt 변수
cnt = 0
# matrix의 짝수열과 홀수열에서의 기능을 달리해주기 위한 turn 변수
turn = 0
for i in matrix:
turn +=1
# matrix의 홀수열에 대한 for문
if turn%2:
# 흰 칸이 0부터 시작하기 때문에 0부터 체크한다.
for j in range(0, len(i), 2):
if 'F' == i[j]:
cnt += 1
# matrix의 짝수열에 대한 for문
else:
# 흰 칸이 1부터 시작하기 때문에 1부터 체크한다.
for j in range(1, len(i), 2):
if 'F' == i[j]:
cnt += 1
print(cnt)
'# 3. APS > 백준' 카테고리의 다른 글
백준 # Python_17298_오큰수 (1) | 2021.09.19 |
---|---|
백준 # Python_17608_막대기 (0) | 2021.09.18 |
백준 # Python_2798_블랙잭 (0) | 2021.09.02 |
백준 # Python_2501_약수 구하기 (0) | 2021.09.02 |
백준 # Python_2750_수 정렬하기 (0) | 2021.07.30 |