알고리즘/acmicpc 코드

[acmicpc] 백준 1018 체스판 다시 칠하기 정답 코드

ahdelron 2020. 4. 12. 03:50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h> 
#include <limits.h>
#define MIN(a,b) ((a > b) ? b : a)
 
char g_arrBoard[52][52];
 
unsigned int fnGetMinFill(unsigned int nX, unsigned int nY)
{
    unsigned int nMinCount = INT_MAX;
    
    unsigned int nTestCase1 = 0;
    for(int i = 0; i < 8; i++)
    {
        for(int j = 0; j < 8; j++)
        {
            if((i%2)^(j%2))
            {
                if(g_arrBoard[nX+i][nY+j] != 'B') nTestCase1++;
            }
            else
            {
                if(g_arrBoard[nX+i][nY+j] != 'W') nTestCase1++;
            }
        }
    }
    nMinCount = MIN(nMinCount, nTestCase1);
    
    unsigned int nTestCase2 = 0;
    for(int i = 0; i < 8; i++)
    {
        for(int j = 0; j < 8; j++)
        {
            if((i%2)^(j%2))
            {
                if(g_arrBoard[nX+i][nY+j] != 'W') nTestCase2++;
            }
            else
            {
                if(g_arrBoard[nX+i][nY+j] != 'B') nTestCase2++;
            }
        }
    }
    nMinCount = MIN(nMinCount, nTestCase2);
    
    return nMinCount;
}
 
int main(void)
{
    unsigned int nHeight, nWidth;
    scanf("%u %u"&nHeight, &nWidth);
    for(unsigned int i = 0; i < nHeight; i++)
    {
        for(unsigned int j = 0; j < nWidth; j++)
        {
            scanf(" %c"&g_arrBoard[i][j]);
        }
    }
    
    unsigned int nMinCount = INT_MAX;
    for(unsigned int i = 0; i < nHeight - 7; i++)
    {
        for(unsigned int j = 0; j < nWidth - 7; j++)
        {
            nMinCount = MIN(nMinCount, fnGetMinFill(i, j));
        }
    }
    
    printf("%u", nMinCount);
    
    return 0;
}
cs

 

56번째 줄의 scanf("%c"), scanf("%c "), scanf(" %c") 이 3개가 뭔 차이가 있을까?

본인의 경험에 의하면, 첫 째를 사용하면 값이 완전 다르게 나온다. 둘 째는 마지막에 아무 문자를 한번 더 입력해줘야 값이 나오고, 셋 째는 위 소스코드에 적용돼있는 걸 볼 수 있다시피, 아무 제약 없이 올바른 값이 잘 출력된다.

세 번째 방법처럼 앞에 스페이스바로 한 개 띄어주면, 입력 받을 필요 없는 \n를 지워준다고 한다.

나름 꿀팁인 듯 하니 나중에 비슷한 문제를 겪는다면 이 방법으로 해결하는 것을 추천한다.