진짜 왠만하면 풀이 검색 안 하려고 노력하는데, 이거는 검색해버렸다. 정답률이 진짜 50% 말이 됨??규칙 안 떠오르면 진짜 이건 노답인데ㅜ,ㅠ 시험 때 이런거 안 나왔으며누,ㅠ
접근법
0G : 0
1G : 0, 1
2G : 0 1, 2 1
3G : 0 1 2 1, 2 3 2 1
4G : 0 1 2 1 2 3 2 1, 1 2 3 2 3 3 2
자!!규칙이 보이는가!!! 0~3은 방향을 나타낸다.
3G를 예로 들면 0 1 2 1은 2G와 동일 2 3 2 1은 0 1 2 1을 뒤에서부터 1씩 더한 것이다.
0 1 2 1 -> 2 3 2 1
최정적으로는 (x + 1) %4해준다...ㅎㅎ
그걸 배열에 그래...사각형 카운트만 해주면 된다.
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 | #include <stdio.h> #include <string.h> typedef struct { int x, y, d, g; }Dragon; int map[111][111]; Dragon D; int arr[1024*2] = { 0, }; int main() { int N; scanf("%d",&N); for (int n = 0; n < N; n++) { scanf("%d %d %d %d", &D.x, &D.y, &D.d, &D.g); int Top = 0, Bottom = 0; arr[++Top] = D.d; for (int gg = 0; gg < D.g; gg++) { Bottom = Top; while(Bottom--) { arr[++Top] = (arr[Bottom + 1] + 1) % 4; } } int x = D.x, y = D.y; map[y][x] = 1; for (int i = 1; i <= Top; i++) { switch (arr[i]) { case 0: map[y][x + 1] = 1; x += 1; break; case 1: map[y - 1][x] = 1; y -= 1; break; case 2: map[y][x - 1] = 1; x -= 1; break; case 3: map[y + 1][x] = 1; y += 1; break; } } } int count = 0; for (int i = 0; i <= 100; i++) { for (int j = 0; j <= 100; j++) { if (map[i][j] && map[i + 1][j] && map[i][j + 1] && map[i + 1][j + 1]) count++; } } printf("%d",count); return 0; } | cs |
'SW 업무 관련 > 백준' 카테고리의 다른 글
[C언어] 15684. 사다리 조작 (474) | 2018.10.16 |
---|---|
[C언어] 12100. 2048(EASY) (415) | 2018.10.15 |
[C언어] 14500 테트로미노 (404) | 2018.10.14 |
[C언어] 14501. 퇴사 (0) | 2018.10.09 |
[C언어] 9207. 페그 솔리테어 (0) | 2018.10.03 |