1220. [S/W 문제해결 기본] 5일차 - Magnetic

SW 업무 관련/SW Expert Academy

1220. [S/W 문제해결 기본] 5일차 - Magnetic

WillBe_ 2018. 7. 31. 00:10


1. 정직하게 자성체를 한 칸씩 옮겨가면서 더 이상 옮길게 없으면  Count 시작!


속도가...너무 느려서 다른 사람들 코드를 보니..이해가 안 간다ㅜ,ㅠ


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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <stdio.h>
#include <string.h>
 
int a, b;
int map[101][101];
 
int main()
{
    for (int i = 1; i <= 10; i++)
    {
        int Size = 0;
        scanf("%d",&Size);
        
        for (int a = 0; a < 100; a++)
        {
            for (int b = 0; b < 100; b++)
            {
                scanf("%d"&map[a][b]);
            }
        }
 
        while (1)
        {
            int count = 0;
            for (int a = 0; a < 100; a++)
            {
                for (int b = 0; b < 100; b++)
                {
                    int temp = 0;
 
                    if (b + 1 >= 100 || b - 1 < 0)
                        continue;
 
                    if (map[b][a] == 1 && map[b+1][a] == 0)
                    {
                        temp = map[b][a];
                        map[b][a] = map[b + 1][a];
                        map[b + 1][a] = temp;
                        count++;
                    }
                    else if (map[b][a] == 2 && map[b-1][a] == 0)
                    {
                        temp = map[b][a];
                        map[b][a] = map[b - 1][a];
                        map[b - 1][a] = temp;
                        count++;
                    }
                }
            }
            if (count == 0)
                break;
        }
 
        for (int a = 0; a < 100; a++)
        {
            if (map[0][a] == 2)
                map[0][a] = 0;
            else if (map[99][a] == 1)
                map[99][a] = 0;
        }
 
        int count = 0;
        for (int a = 0; a < 100; a++)
        {
            for (int b = 0; b < 100; b++)
            {
                if (map[b][a] == 1)
                {
                    for (int c = 0; c < 100 - b; c++)
                    {
                        if (map[b + c][a] == 1)
                            map[b + c][a] = 0;
                        else if (map[b + c][a] == 2)
                        {
                            map[b + c][a] = 0;
                            count++;
                            break;
                        }
                    }
                }
            }
        }
        printf("#%d %d\n", i, count);
    }
 
 
    return 0;
}
cs