문제
체스판은 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
#include <stdio.h>
int main() {
char chessboard[9][9];
int cnt = 0;
for (int i = 0; i < 8; i++) {
scanf("%s", chessboard[i]);
}
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if ((i + j) % 2 == 0 && chessboard[i][j] == 'F')
cnt++;
}
}
printf("%d", cnt);
return 0;
}
구조는 간단하지만 조건을 생각하는게 어려울 수 있다.
체스판의 하얀칸을 생각해보면 맨위의 맨왼쪽칸을 (0,0)이라고 할 시, 다음 하얀칸은 (0,2)이 된다.
그렇게 쭉쭉 생각해보면, 0번째 줄에서는 0,2,4,6,8
1번째 줄에서는 1,3,5,7
2번째 줄에서는 0,2,4,6,8...
으로 반복하게된다.
여기서 규칙성은 하얀 칸의 행번호와 열번호의 합이 짝수라는 점이다.
따라서 조건에 행번호와 열번호의 합이 짝수이면서, 위에 돌이 놓여져있으면 이라는 조건을 걸어주면된다.
'PS > 백준' 카테고리의 다른 글
백준 / String(문자열) / 1032번 / 명령 프롬프트 / C (0) | 2021.02.27 |
---|---|
백준 / String(문자열) / 10798번 / 세로읽기 / C (0) | 2021.02.27 |
백준 / String(문자열) / 2902번 / KMP는 왜 KMP일까? / C (0) | 2021.02.25 |
백준 / String(문자열) / 10987번 / 모음의 개수 / C (0) | 2021.02.25 |