문제
https://www.acmicpc.net/problem/1100
8 * 8 크기의 검정 칸과 하얀 칸이 번갈아가며 칠해진 체스판이 있다. 가장 왼쪽 위칸 (0, 0)이 하얀 칸이라고 할 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하라.
말이 없는 칸은 "."로 표기하고, 말이 있는 칸은 "F"로 표기한다.
.F.F...F
F...F.F.
...F.F.F
F.F...F.
.F...F..
F...F.F.
.F.F.F.F
..FF..F.
풀이
내 풀이
1. 체스판의 상태를 문자열 배열로 입력받는다.
2. 체스판을 탐색하며, 하얀 칸이면서(행과 열이 짝수이거나 행과 열이 홀수) 말이 있을 때 말의 개수를 1씩 증가시킨다.
3. 최종 확인된 말의 개수를 출력한다.
코드
import sys
pan = [list(sys.stdin.readline()[:-1]) for _ in range(8)]
c = 0
for i in range(8):
for j in range(8):
if pan[i][j] == 'F' and ((i % 2 == 0 and j % 2 == 0) or (i % 2 == 1 and j % 2 == 1)):
c += 1
print(c)
다른 사람 풀이
하얀 칸과 검은 칸이 번갈아 색칠되었다는 점을 이용하면 코드 길이를 줄일 수 있다.
1. 체스판의 상태를 입력받는다. 문자열로 누적하여 저장하며, 한 행의 길이를 홀수인 9로 맞춘다.
2. 체스판의 하얀 칸에 말이 몇 개인지 센다. 체스판 문자열의 인덱스를 2씩 증가시킨 결과이 하얀 칸에 해당한다.
코드
import sys
r = ''
for _ in range(8):
r += sys.stdin.readline()
print(r[::2].count('F'))