[210124][백준/BOJ] 1100번 하얀 칸

KeonWoo Kim·2021년 1월 24일
0

알고리즘

목록 보기
3/84

문제

입출력


풀이

2차원 배열을 입력받고 하얀칸에 말이 몇개 있는지 찾는 문제이다.
체스의 가장 왼쪽(0,0)이 흰색이며 체스판은 번갈아가면서 흰색, 검은색이 칠해져있다.
따라서 체스판의 가로와 세로의 합(i+j)이 짝수면 흰색, 홀수면 검은색임을 알 수 있다.

코드

#include <iostream>
using namespace std;

int main() {
	char chess[8][8];
	int cnt = 0;
	chess[0][0] = 0;

	for (int i = 0; i < 8; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			// 0,0칸이 하얀색이고 번갈아가면서 검정 하얀색이 칠해져있기때문에 
			// i+j합이 짝수면 하얀색 홀수면 검정색이다
			cin >> chess[i][j]; 
			if ((i + j) % 2 == 0 && chess[i][j] == 'F')
				cnt++;
		}
	}
	printf("%d\n", cnt);
}

피드백

위 코드로 정상적으로 제출을 할 수는 있으나 백준 랭커분들의 코드를 보다가 내 코드의 아쉬운 점을 몇개 발견하고 이를 개선해볼려고 한다.

체스판의 0,0이 흰색이라는 내용을 보고

chess[0][0]=0;

이라는 초기화를 했는데 이는 불필요한 초기화였다. 그리고 변수를 전역으로 선언하면 모든 값이 0으로 초기화되기 때문에 변수를 따로 초기화하는 일을 할 필요가 없으므로 변수를 전역으로 선언하도록 하겠다.
또한 char형은 배열의 끝에 null이 있다. 이를 생각해서 배열을

char chess[8][9];

로 선언하면 좋을거 같다.

코드

#include <iostream>
using namespace std;
char chess[8][9];

int main() {
	int cnt = 0;

	for (int i = 0; i < 8; i++)
	{
		for (int j = 0; j < 8; j++)
		{
			// 0,0칸이 하얀색이고 번갈아가면서 검정 하얀색이 칠해져있기때문에 
			// i+j합이 짝수면 하얀색 홀수면 검정색이다
			cin >> chess[i][j]; 
			if ((i + j) % 2 == 0 && chess[i][j] == 'F')
				cnt++;
		}
	}
	printf("%d\n", cnt);
}
profile
안녕하세요

0개의 댓글

관련 채용 정보