티스토리 뷰
영어문제는 가끔 알고리즘보다 영어가 어려워서 틀린다
문제 자체는 트라이 기본문제 boggle처럼 생겼다
주어지는 문자열에서 MOO를 찾을건데
M과 O를 다른 문자로 대체 가능하고 그 때의 최대값을 출력해야한다!
근데 여기서 자기 자신으로는 대체가 불가능하다
즉 M-> M || O->O라면 불가능 한 경우다
이걸 처음에 발견 못해서 틀렸다
크기가 작으므로 26 X 26 X 50 X 50으로 풀면 충분히 들어온다~
소스코드
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 | #include <iostream> #include <algorithm> using namespace std; char board[55][55]; int n, m,ans; int dx[8] = { 0,-1,-1,-1,0,1,1,1 }; int dy[8] = { 1,1,0,-1,-1,-1,0,1 }; int recover(int x,int y) { char a = 'A' + x; char b = 'A' + y; int ret = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (board[i][j] == a) { for (int k = 0; k < 8; k++) { bool ok = true; int nx = i; int ny = j; for (int q = 0; q < 2; q++) { nx += dx[k]; ny += dy[k]; if (0 <= nx && nx < n && 0 <= ny && ny < m) { if (board[nx][ny] != b) ok = false; } else ok = false; } if(ok) ret++; } } } } return ret; } int main() { scanf(" %d %d", &n, &m); for (int i = 0; i < n; i++) scanf(" %s", &board[i]); for (int i = 0; i < 26; i++) { if (i == 'M' - 'A') continue; for (int j = 0; j < 26; j++) { if (i == j || j=='O'-'A') continue; ans = max(ans, recover(i, j)); } } printf("%d\n", ans); } | cs |
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 10766 Trapped in the Haybales (0) | 2018.07.11 |
---|---|
[백준] 10765 Bessie Gets Even (0) | 2018.07.11 |
[백준] 12865 평범한 배낭 (1) | 2018.07.11 |
[백준] 15710 xor 게임 (4) | 2018.07.09 |
[백준] 2405 세 수, 두 M (1) | 2018.07.09 |
댓글