1210. [S/W 문제해결 기본] 2일차 - Ladder1

SW 업무 관련/SW Expert Academy

1210. [S/W 문제해결 기본] 2일차 - Ladder1

WillBe_ 2018. 7. 16. 23:47

사타리타기!!!!


시작을 전부 뒤져서 찾을 필요가 전~~~~~~~혀 없다.


x부터 거꾸로 올라가면 한 방에 해결!!!!!!!


큐도 필요없이..그냥 거꾸로 올라가면서 1만 쭉~따라가면 된다.


주의해야하는 것은!!!


나는


int dx[] = { -1,1,0,0 };

int dy[] = { 0,0,-1,1 };


for (int k = 0; k < 4; k++)

{

int xx = X + dx[k];

int yy = Y + dy[k];

if (map[yy][xx] == 1)

{

X += dx[k];

Y += dy[k];

map[Y][X] = 2;

break;

}

}

위와 같은 방법을 써써 상하좌우 4방을 살피는데...


int dx[]={0,0,-1,1};

int dy[]={-1,1,0,0};


와 같이 y축의 1을 먼저 찾으면 엉뚱한 결과가 나온다!!!길을 가다가 가로가 나오면 가로부터 들어가야하니!!!!! 주의바람.



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
#include <stdio.h>
#include <string.h>
 
typedef struct {
    int x;
    int y;
} point;
 
int map[111][111];
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
point Finish;
point Start;
 
 
int main()
{
    for (int i = 1 ; i <= 10 ; i++)
    {
        int T;
        memset(map, 0sizeof(map));
        Finish.x = 0;
        Finish.y = 0;
        Start.x = 0;
        Start.y = 0;
 
        scanf("%d",&T);
 
        for (int a = 0; a < 100;a++)
        {
            for (int b = 0; b < 100; b++)
            {
                scanf("%d",&map[a][b]);
                if (map[a][b] == 2)
                {
                    Finish.y = a;
                    Finish.x = b;
                }
            }
        }
 
        int X = Finish.x;
        int Y = Finish.y;
 
        while (1)
        {
            for (int k = 0; k < 4; k++)
            {
                int xx = X + dx[k];
                int yy = Y + dy[k];
                if (map[yy][xx] == 1)
                {
                    X += dx[k];
                    Y += dy[k];
                    map[Y][X] = 2;
                    break;
                }
            }
            if (Y == 0)
            {
                printf("#%d %d\n", i, X);
                break;
            }
        }
 
    }
    return 0;
}
cs