티스토리 뷰
문제 링크입니다.
https://www.acmicpc.net/problem/13459
13459번: 구슬 탈출
첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' 로 이루어져 있다. '.'은 빈 칸을 의미하고, '#'은 공이 이동할 수 없는 장애물 또는 벽을 의미하며, 'O'는 구멍의 위치를 의미한다. 'R'은 빨간 구슬의 위치, 'B'는 파란 구슬의 위치이다. 입력되는 모든 보드
www.acmicpc.net
풀이 방법
13460번의 풀이와 동일하고 출력값만 변경해주면 됩니다.
13460번의 풀이는 아래와 같습니다.
https://dvpzeekke.tistory.com/77?category=909932
[백준 c++] 13460 : 구슬 탈출 2
문제 링크입니다. https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모..
dvpzeekke.tistory.com
풀이
//
// main.cpp
// 13459
//
// Created by Jihye on 2020/04/13.
// Copyright © 2020 Jihye Han. All rights reserved.
//
#include <iostream>
#include <queue>
using namespace std;
struct bead {
int rx, ry, bx, by, d;
};
int m = 0, n = 0;
char map[10][10];
bool check[10][10][10][10];
queue<bead> q;
const int dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};
void move(int &x, int &y, int &c, int dx, int dy) {
while (map[x][y] != 'O' && map[x+dx][y+dy] != '#') {
x += dx;
y += dy;
c++;
}
}
void bfs() {
while (!q.empty()) {
int rx = q.front().rx;
int ry = q.front().ry;
int bx = q.front().bx;
int by = q.front().by;
int d = q.front().d;
q.pop();
if (d >= 10) break;
for (int i = 0; i < 4; i++) {
int nrx = rx, nry = ry, nbx = bx, nby = by, nd = d + 1;
int rc = 0, bc = 0;
move(nrx, nry, rc, dx[i], dy[i]);
move(nbx, nby, bc, dx[i], dy[i]);
if (map[nbx][nby] == 'O') continue;
if (map[nrx][nry] == 'O') {
printf("1\n");
return;
}
if (nrx == nbx && nry == nby) {
if (rc > bc) nrx -= dx[i], nry -= dy[i];
else nbx -= dx[i], nby -= dy[i];
}
if (check[nrx][nry][nbx][nby]) continue;
check[nrx][nry][nbx][nby] = true;
q.push({nrx, nry, nbx, nby, nd});
}
}
printf("0\n");
}
int main() {
int rx = 0, ry = 0, bx = 0, by = 0;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%1s", &map[i][j]);
if (map[i][j] == 'R') rx = i, ry = j;
else if (map[i][j] == 'B') bx = i, by = j;
}
}
check[rx][ry][bx][by] = true;
q.push({rx, ry, bx, by, 0});
bfs();
return 0;
}
'Dev.CodingTest > BACKJOON' 카테고리의 다른 글
[백준 c++] 13458번 : 시험 감독 (0) | 2020.04.25 |
---|---|
[백준 c++] 3190번 : 뱀 (0) | 2020.04.25 |
[백준 c++] 12100번 : 2048 (Easy) (2) | 2020.04.24 |
[백준 c++] 13460번 : 구슬 탈출 2 (0) | 2020.04.14 |
[백준 c++] 1260번: DFS와 BFS (4) | 2020.01.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Collection
- 삼성역량테스트
- datastructure
- aws
- Programmers
- 컬렉션
- BFS
- 이진트리
- ec2
- 코딩테스트
- Xcode
- 깊이우선탐색
- 호제법
- c++
- ios
- 서머코딩
- dp
- 알고리즘
- 시뮬레이션
- 구슬탈출
- 자료구조
- Swift
- 백준
- 스위프트
- isempty
- algorithm
- SummerCoding
- dfs
- 프로그래머스
- count
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함