[C언어] 14500 테트로미노

SW 업무 관련/백준

[C언어] 14500 테트로미노

WillBe_ 2018. 10. 14. 01:13

삼전만 바라본다는 마음으로 LG 인적성 공부를 안 했지만...막상 망치고 나니 아쉽다.

그래도 난 내일 하닉 적성이 있으나 알고리즘을 푼다!!!!!!내 마음을 알아줘 삼성!!!!!!!!!!!!!!!!!!!



정답률 보고 쫄아서, 테트로미노로 맵을 채울 때 가장 많이 사용되는 테트로미노의 개수인 줄 오해를 하였다...ㅎㅎ


그냥 모든 경우의 수 다 해주면 된다. 


접근법.

아래 19가지 경우에 대해 모든 좌표에서의 값 중에서 최댓값을 구하면 끝.


DFS나 BFS로 어떻게 풀지....????





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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
#include <string.h>
 
int N, M, map[505][505], MAX;
 
 
 
int main()
{
    MAX = -1;
    scanf("%d %d"&N, &M);
 
    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= M; j++)
            scanf("%d"&map[i][j]);
 
    for (int a = 1; a <= 19; a++)
    {
        for (int y = N; y > 0; y--)
        {
            for (int x = 1; x <= M; x++)
            {
                int n = 0;
 
                switch (a)
                {
                case 1:
                    if (x + 1 > M || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y][x + 1+ map[y - 1][x] + map[y - 1][x + 1];
                    break;
                case 2:
                    if (y - 3 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 2][x] + map[y - 3][x];
                    break;
                case 3:
                    if (x + 3 > M)
                        break;
                    n = map[y][x] + map[y][x + 1+ map[y][x + 2+ map[y][x + 3];
                    break;
                case 4:
                    if (y - 2 <= 0 || x + 1 > M)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 2][x] + map[y][x + 1];
                    break;
                case 5:
                    if (y - 2 <= 0 || x + 1 > M)
                        break;
                    n = map[y][x] + map[y][x + 1+ map[y - 1][x + 1+ map[y - 2][x + 1];
                    break;
                case 6:
                    if (x + 2 > M || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y][x + 1+ map[y][x + 2];
                    break;
                case 7:
                    if (x + 2 > M || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y][x + 1+ map[y][x + 2+ map[y - 1][x + 2];
                    break;
                case 8:
                    if (x - 1 <= 0 || y - 2 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 1][x - 1+ map[y - 2][x - 1];
                    break;
                case 9:
                    if (x + 1 > M || y - 2 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 1][x + 1+ map[y - 2][x + 1];
                    break;
                case 10:
                    if (x + 2 > M || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y][x + 1+ map[y - 1][x + 1+ map[y - 1][x + 2];
                    break;
                case 11:
                    if (x - 2 <= 0 || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y][x - 1+ map[y - 1][x - 1+ map[y - 1][x - 2];
                    break;
                case 12:
                    if (x - 1 <= 0 || x + 1 > M || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 1][x - 1+ map[y - 1][x + 1];
                    break;
                case 13:
                    if (x + 2 > M || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y][x + 1+ map[y - 1][x + 1+ map[y][x + 2];
                    break;
                case 14:
                    if (y - 2 <= 0 || x + 1> M)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 1][x + 1+ map[y - 2][x];
                    break;
                case 15:
                    if (x - 1 <= 0 || y - 2 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 1][x - 1+ map[y - 2][x];
                    break;
                case 16:
                    if (x + 1 <= 0 || y - 2 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 2][x] + map[y - 2][x + 1];
                    break;
                case 17:
                    if (x - 1 <= 0 || y - 2 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 2][x - 1+ map[y - 2][x];
                    break;
                case 18:
                    if (x - 2 <= 0 || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 1][x - 1+ map[y - 1][x - 2];
                    break;
                case 19:
                    if (x + 2 > M || y - 1 <= 0)
                        break;
                    n = map[y][x] + map[y - 1][x] + map[y - 1][x + 1+ map[y - 1][x + 2];
                    break;
                }
 
                if (n > MAX)
                    MAX = n;
            }
        }
    }
 
    printf("%d\n",MAX);
 
    return 0;
}
cs


'SW 업무 관련 > 백준' 카테고리의 다른 글

[C언어] 12100. 2048(EASY)  (415) 2018.10.15
[C언어] 15685. 드래곤 커브  (423) 2018.10.14
[C언어] 14501. 퇴사  (0) 2018.10.09
[C언어] 9207. 페그 솔리테어  (0) 2018.10.03
[C언어]14620 꽃길  (0) 2018.10.01