-
https://www.acmicpc.net/problem/13460
13460번: 구슬 탈출 2
첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B'
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%2013460
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
전에 풀었던 문제의 업그레이드 버전이였는데 내소스는 따로 방문 체크를 하지 않고 문제를 해결한 소스라서
구슬 탈출 2에서는 방문체크를 해줘야 되나 싶었는데 그냥 출력하는 부분만 달라서
출력문만 손보고 제출해서 문제를 해결했다.
먼저 데이터를 저장할 클래스를 만드는 데 각각 구슬의 좌표와 cnt 값 총 5개의 값을 입력받는다.
이후 입력 처리를 하고 각 구슬 좌표를 저장한 뒤 큐에 넣고 bfs를 한다.
큐에서 빼낸 뒤 cnt 값이 10보다 크면 실패했으므로 -1을 출력해 주고 끝내고,
만약 파란 구슬이 골인했으면 다음 반복으로 넘기고,
빨간 구슬이 골인(파란 구슬을 위에서 먼저 체크하기 때문에) 했으면 1을 출력하고 멈춘다.
이후 각 구슬들을 이동시키는데 테두리가 #으로둘러싸여 있으므로 #과 같아지면 한 칸 뒤로
이동시키고 멈추고, 골인을 하면 해당 자리에서 멈춰준다.
이제 두 구슬들의 좌표값을 비교하는데 처음에 이 부분에서 둘 다 골인한 경우를 체크 안 해줘서
마지막 테케에서 틀렸었고, 둘 다 골인했는지는 하나의 좌표만 비교해 주면 된다.
이후 각 구슬들을 시작 좌표에서 현재 좌표까지의 거리 값을 저장한 뒤 비교해서
빨간 구슬이 크면 빨간 구슬이 더 많이 이동했으니깐 한 칸 뒤로 가고
파란 구슬이 크면 파란 구슬을 이동시킨 뒤,
큐에 현재 빨간 구슬 좌표, 파란 구슬 좌표, 이전 cnt+1 값을 넣어주고
bfs를 계속 진행하면 문제를 해결할 수 있다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 1158 요세푸스 문제 파이썬 (0) 2021.11.03 Baekjoon 1110 더하기 사이클 파이썬 (0) 2021.11.03 Baekjoon 9012 괄호 파이썬 (0) 2021.11.03 Baekjoon 5014 스타트링크 JAVA (0) 2021.11.01 Baekjoon 19238 스마트 택시 JAVA (0) 2021.10.31 댓글