일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 아호코라식
- Seg
- Segment tree
- LCA
- 전월세
- 티스토리챌린지
- 트라이
- suffix array
- TRIE
- 트리dp
- 이분매칭
- dinic
- 구현
- 2-sat
- 오블완
- 좌표압축
- spfa
- lcp
- 디닉
- 접미사배열
- 투룸
- treedp
- 임대차계약
- 2SAT
- MCMF
- 이분탐색
- SCC
- 월세
- 유량
- 세그먼트트리
Archives
- Today
- Total
N coding
4217_신성문자 본문
구현문제
나는 삼성 B형 연습중이었어서 dfs말고 bfs쓰고, queue도 직접 구현하였다.
디코딩하고 그림을 찾아내면 된다.
그림은 그 내부의 빈공간의 개수를 기준으로 찾으면 됨.
나는 일단 검은부분을 각각 idx를 올리면서 구해주고 - 각각의 그림은 다른 값을 갖게됨
다음으로 하얀부분에 들어가는데 그 하얀부분이 만나는 검은 부분의 값이 한 개일때 idx의 내부빈공간++을 해줌
그리고 counting sort로 출력~!
(외부로 나가는 건 또 따로 처리)
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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | #include <iostream> using namespace std; struct pair2 { int y, x; pair2(int y = 0, int x = 0) : y(y), x(x) {} }; class queue2 { private: pair2 arr[100001]; int l, r, cap; public: queue2() { l = 0; r = 0; cap = 100000; } pair2 front() { if (l > r) return pair2(); return arr[l]; } void pop() { if (l == r) return; //empty l = (l + 1) % cap; } void push(int y, int x) { if ((r + 1) % cap == l) return; //overflow; arr[r].y = y; arr[r].x = x; r = (r + 1) % cap; } void clear() { l = r; } bool empty() { return l == r; } }; //A - 1개 , J - 3개, D - 5개, S - 4개 , W - 0개 , K - 2개 int H, W, cnt; char origin[201][51]; int visit[201][250], a[8] = { -1, 1, 0, 0, 0, 0, -1, 1 }; int words[25000], res[27], paint[250][250]; int bfs(int y, int x, int t) { if (t == 0) ++cnt; queue2 q; //queue<pair<int, int>> q; q.push( y, x ); if (t == 0) visit[y][x] = cnt; else visit[y][x] = -2; int what = -1, count = 0; while (!q.empty()) { y = q.front().y; x = q.front().x; q.pop(); for (int i = 0; i < 4; ++i) { int ny = y + a[i]; int nx = x + a[i + 4]; if (ny < 0 || nx < 0 || ny >= H || nx >= 4 * W) { if (what != -2) { what = -2; count++; } continue; } if (paint[ny][nx] == 1 && !visit[ny][nx] && t == 0) { visit[ny][nx] = cnt; q.push(ny, nx); } if (paint[ny][nx] == 0 && !visit[ny][nx] && t == 1) { visit[ny][nx] = -2; q.push(ny, nx); } else if (paint[ny][nx] == 1 && t == 1) { if (what != visit[ny][nx]) { what = visit[ny][nx]; count++; } } } } if (t == 1) { if (what > -1 && count == 1) { return what; } else return 0; } return 0; } int func(char c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'a' && c <= 'f') return c - 'a' + 10; } int main() { cin.tie(NULL); ios::sync_with_stdio(false); int test = 0; while (1) { test++; cin >> H >> W; if (!H && !W) return 0; for (int i = 0; i < H; ++i) { for (int j = 0; j < 4*W; ++j) { visit[i][j] = 0; } } cnt = 0; for (int i = 0; i < H; ++i) cin >> origin[i]; for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { int tmp = func(origin[i][j]); for (int k = 3; k >= 0; --k) { paint[i][j * 4 + k] = tmp % 2; tmp /= 2; } } } for (int i = 0; i < H; ++i) { for (int j = 0; j < W*4; ++j) { if (paint[i][j] == 1 && !visit[i][j]) { bfs(i, j, 0); } } } for (int i = 0; i < H; ++i) { for (int j = 0; j < W * 4; ++j) { if (paint[i][j] == 0 && !visit[i][j]) { int tmp = bfs(i, j, 1); if (tmp != 0) { words[tmp]++; } } } } for (int i = 1; i <= cnt; ++i) { if (words[i] == 1) res[0]++; else if (words[i] == 3) res['J' - 'A']++; else if (words[i] == 5) res['D' - 'A']++; else if (words[i] == 4) res['S' - 'A']++; else if (words[i] == 0) res['W' - 'A']++; else if (words[i] == 2) res['K' - 'A']++; words[i] = 0; } cout << "Case " << test << ": "; for (int i = 0; i < 26; ++i) { for (int j = 0; j < res[i]; ++j){ cout << (char)(i + 'A'); } res[i] = 0; } cout << '\n'; } } | cs |
'PS' 카테고리의 다른 글
13576_Prefix와 Suffix (0) | 2018.08.31 |
---|---|
2809_아스키거리 (3) | 2018.08.30 |
15940_네트워크 연결 (2) | 2018.08.29 |
3654_L퍼즐 (0) | 2018.08.29 |
3789_Hidden password (0) | 2018.08.29 |