티스토리 뷰
내가 정답 비율 다 낮춰준 문제 ㅎㅎ
코딩을 할수록 실수가 늘어간다 역시 코딩이란..
단순하게 bfs로 경로 찾아서 최단거리 구하고 이미 검은 칸은 뺴준다..
bfs 함수에서 리턴하는 변수명을 계속 잘못 써서 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 | #include <iostream> #include <queue> #include <cstring> using namespace std; char arr[2][55]; int d[2][55]; bool check[2][55]; int dx[3] = { 1,0,-1 }; int dy[3] = { 0,1,0 }; int n, ans = 1e9; int bfs(int a, int b) { int ret = 1e9; memset(check, 0, sizeof(check)); memset(d, -1, sizeof(d)); queue<pair<int, int>> q; q.push({ a,b }); check[a][b] = true; d[a][b] = 1; while (!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); for (int i = 0; i < 3; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (0 <= nx && nx < 2 && 0 <= ny &&ny < n) { if (!check[nx][ny] && arr[nx][ny] == '.') { check[nx][ny] = true; d[nx][ny] = d[x][y] + 1; q.push({ nx,ny }); } } } } return ret = min(d[0][n - 1] == -1 ? 1e9 : d[0][n - 1], d[1][n - 1] == -1 ? 1e9 : d[1][n - 1]); } int main() { scanf(" %d", &n); for (int i = 0; i < 2; i++) scanf(" %s", &arr[i]); if (arr[0][0] == '.') ans = min(ans, bfs(0, 0)); if (arr[1][0] == '.') ans = min(ans, bfs(1, 0)); for (int i = 0; i < 2; i++) { for (int j = 0; j < n; j++) { if (arr[i][j] == '#') ans++; } } printf("%d\n", n * 2 - ans); } | cs |
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 12888 완벽 이진 트리 도로 네트워크 (0) | 2018.07.18 |
---|---|
[백준] 5670 휴대폰 자판 (0) | 2018.07.18 |
[백준] 12873 기념품 (1) | 2018.07.17 |
[백준] 12867 N차원 여행 (0) | 2018.07.13 |
[백준] 15386 Birokracija (3) | 2018.07.12 |
댓글