삼전만 바라본다는 마음으로 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 |