-
https://www.acmicpc.net/problem/15644
15644번: 구슬 탈출 3
첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B'
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%2015644
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 map가 주어졌을 때 구슬을 굴려서 골인할 수 있으면 이동 횟수와 이동 방향을
아니면 -1을 출력하는 문제다.
조건은 구슬은 2개가 있고, 빨간 구슬이 빠지면 성공, 파란 구슬이 빠지면 실패,
동시에 구멍에 빠져도 실패, 동시에 같은 칸에 있을 수 없고,
이동 횟수는 10회까지 이후는 실패, 이동은 한쪽 방향으로 벽까지 쭉 이동시킨다.
https://soonil.tistory.com/274
Baekjoon 13459 구슬 탈출 JAVA
https://www.acmicpc.net/problem/13459 13459번: 구슬 탈출 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의..
soonil.tistory.com
Baekjoon 13460 구슬 탈출 2 JAVA
https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의..
soonil.tistory.com
전에 풀었던 문제의 업그레이드 버전이라 큐에 데이터를 넣는 형식에 String형을 하나 추가해주고
큐에 삽입할 때 방향에 따라 dir를 갱신하는 방식을 추가하여 최종적으로
도착했을 때 이동 횟수와 같이 출력해줌으로써 문제를 해결했다.
먼저 데이터를 저장할 클래스를 만드는 데 각각 구슬의 좌표와 cnt 값, dir 값 총 6개의 값을 입력받는다.
이후 입력 처리를 하고 각 구슬 좌표를 저장한 뒤 큐에 넣고 bfs를 한다.
큐에서 빼낸 뒤 cnt 값이 10보다 크면 실패했으므로 -1을 출력해 주고 끝내고,
만약 파란 구슬이 골인했으면 다음 반복으로 넘기고,
빨간 구슬이 골인(파란 구슬을 위에서 먼저 체크하기 때문에) 했으면 cnt값과 dir 값을 출력하고 멈춘다.
이후 각 구슬들을 이동시키는데 테두리가 #으로 둘러싸여 있으므로 #과 같아지면 한 칸 뒤로
이동시키고 멈추고, 골인을 하면 해당 자리에서 멈춰준다.
이제 두 구슬들의 좌표값을 비교하는데, 둘 다 골인했는지는 하나의 좌표만 비교해 주면 된다.
이후 각 구슬들을 시작 좌표에서 현재 좌표까지의 거리 값을 저장한 뒤 비교해서
빨간 구슬이 크면 빨간 구슬이 더 많이 이동했으니깐 한 칸 뒤로 가고
파란 구슬이 크면 파란 구슬을 이동시킨 뒤,
큐에 현재 빨간 구슬 좌표, 파란 구슬 좌표, 이전 cnt+1 값을 넣어주고
bfs를 계속 진행하면 문제를 해결할 수 있다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 14442 벽 부수고 이동하기 2 JAVA (0) 2022.01.11 Baekjoon 17391 무한부스터 JAVA (0) 2022.01.10 Baekjoon 4396 지뢰 찾기 JAVA (0) 2022.01.08 Baekjoon 5427 불 JAVA (0) 2022.01.06 Baekjoon 14940 쉬운 최단거리 JAVA (0) 2022.01.05 댓글