티스토리 뷰

알고리즘

[알고리즘] 백준 13460

묵지수 2019. 10. 13. 01:09

문제 링크

 

https://www.acmicpc.net/problem/13460

 

13460번: 구슬 탈출 2

첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' 로 이루어져 있다. '.'은 빈 칸을 의미하고, '#'은 공이 이동할 수 없는 장애물 또는 벽을 의미하며, 'O'는 구멍의 위치를 의미한다. 'R'은 빨간 구슬의 위치, 'B'는 파란 구슬의 위치이다. 입력되는 모든 보드

www.acmicpc.net

 

풀이

 

 

풀이방법

 

보드를 최소 몇번 기울여서 빨간 공을 구멍으로 빼낼 수 있는지를 구하는 문제이고 BFS 알고리즘을 활용하여 풀이를 진행했습니다.

 

전반적으로 다음과 같은 과정으로 풀이를 진행됩니다.

 

1. 초기값 설정

2. 반복횟수와 빨간공, 파란공의 위치를 저장하는 큐에 초기값 추가

3. 큐에서 하나를 꺼내서 상하좌우로 보드 기울이기

4. 큐가 비어있거나 반복횟수가 10회 초과이면 -1 출력 후 종료

5. 상화좌우로 기울였을 때의 위치 값 검사

   5-1. 방문한 적이 있는 지

   5-2. 파란 공이 굴러 떨어지는지

   5-3. 빨간 공이 굴러 떨어지는지 -> 반복횟수 출력 후 종료 

6. 위치 값 검사를 통과한 값은 큐에 추가한 후 3번 과정부터 다시 반복

 

중요하게 생각한 점

 

  • 보드를 기울임에 따라 변하는 값은 빨간 공과 파란 공의 위치
  • 이 값을 따로 기억해두어 같은 동작이 반복되는 것을 방지해야 한다고 생각하여 visited 라는 Set으로 방문이력(?)을 관리
  • 위, 아래, 오른쪽, 왼쪽으로 보드를 기울일 때 빨간공과 파랑공의 위치를 고려하여 먼저 기울여야 하는 공을 순서대로 움직이도록 해야 함
  • 공은 움직일 방향이 빈 곳이 아닐 때까지 움직일 수 있음
  • rollTheBoard, roll 메서드에 이러한 로직을 구현했는데 너무 하드코딩한것 같네요...

 

'알고리즘' 카테고리의 다른 글

[알고리즘] 백준 2869  (0) 2019.11.17
[알고리즘] SWEA 2806 N-Queen  (0) 2019.11.02
[알고리즘] SWEA 1868 파핑파핑 지뢰찾기  (0) 2019.11.02
[알고리즘] 백준 2309  (0) 2019.10.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함