백준 알고리즘 1100번 하얀 칸 문제입니다.
(참고 - https://www.acmicpc.net/problem/1100 )
코드)
#include <stdio.h>
char arr[8][8];
int main() {
int i, j, k, l, cnt=0;
for(i = 0; i < 8; i++) {
gets(arr[i]);
}
for(i=0; i<8; i+=2)
for(j=0; j<8; j+=2)
if(arr[i][j] == 'F')
cnt++;
for(k=1; k<8; k+=2)
for(l = 1; l<8; l+=2)
if(arr[k][l] == 'F')
cnt++;
printf("%d\n", cnt);
return 0;
}
- 이번 문제는 정수형 데이터를 가지고 노는것이 아니라 문자를 상대해야하는 문제입니다.ㅎㅎ
저는 2차원배열 arr[8][8]을 만들어주어 해결하였습니다.
그리고 arr배열에 gets함수를 이용해서 '.' 과 'F'에 대해 입력받도록 하였습니다.
(저는 gets함수를 빠르게 이용해보았지만 실제 사용시에는 fgets나, 다른 로직을 사용해보는 것을 권합니다..
gets함수는 입력받을 때에 크기를 지정받지 않기 때문에 버퍼 오버플로우를 유발할 수 있습니다.
즉, 배열크기를 넘어가는 값을 입력받게되면 메모리의 어느영역에 저장 될 지 알 수 없다는 뜻입니다.!!)
그리고 이중 for문을 두번 사용하여 홀수줄, 짝수줄로 구분하여 F라는 글자를 탐색하며 카운트를 세주는 방법으로 해결 하였습니다.
(문제는 풀었지만 비효율적인 방법입니다.(__) 더 좋은 로직으로 해결하시길 바랍니다.)
이번 문제는 2차원 배열을 사용할 수 있는가, 문자에 대한 입력과 비교정도를 할 수 있는가 정도로 생각해봅니다.
+) 추가 -> 위의 로직을 아래와 같이 입력을 받는 순간부터, 비교구문을 이용하여 바로 Count를 해주면 좀 더 효율적으로 풀 수 있겠습니다.
for(i=0; i< 8; i++) {
for(j =0; j<8; j++) {
scanf(" %c", &a[i][j]);
if(((i % 2 == 0) && ( j % 2 == 0) || (i % 2 == 1) && (j % 2 == 1)) && (a[i][j] == 'F'))
cnt++;
}
}
'Programming > Algorithm' 카테고리의 다른 글
백준 알고리즘 - 1731번 : 추론 (0) | 2016.04.19 |
---|---|
백준 알고리즘 - 1110번 : 더하기 사이클 (0) | 2016.04.19 |
백준 알고리즘 - 1085번 : 직사각형에서 탈출 (0) | 2016.04.19 |
백준 알고리즘 - 1057번 : 토너먼트 (0) | 2016.04.19 |
백준 알고리즘 - 1037번 : 약수 (1) | 2016.04.18 |
WRITTEN BY