[BFS] - G5_13549_숨바꼭질 3

2023. 5. 27. 15:32· 알고리즘/문제
목차
  1. 🔥 - Java 코드

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

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

📌 - 처음 생각한 풀이

  1. 방문 배열 -1로 초기화
  2. 방문 배열이 -1이거나 BFS로 탐색했을 때 방문한 배열의 값이 이전 값보다 작으면 교체
  3. BFS를 통해서 시작 숫자부터 목표 숫자까지 -1, +1 , *2 반복
  4. 해당 번호에 도착하면 종료 및 출력

 

- 시간 복잡도는 따로 생각하지 않고 일단 로직이 맞는지 확인하고 싶어서 시간초과가 난다 생각하더라도 구현 함

- 제출했는데 계속 ArrayIndexOutOfBound가 발생해서 범위를 조정하고 수정했는데도 계속 발생해서 하다가 BFS로 푸는게 아니가 보다 하고 접었다가 다음날 다시 확인함

- 알고보니 뒤의 목표 숫자로만 배열을 만들다 보니 뒤의 목표 숫자가 앞의 시작 숫자 보다 낮을 경우 해당하는 배열만큼 초기화를 해주지 않아서 두 숫자 중 큰 값으로 배열을 초기화 함

->  로직은 맞았는데 스스로 믿지 못했기 때문에 틀렸다. 조금 더 확인을 했으면 아마 ArrayIndexOutOfBound 에러를 빠르게 해결했을텐데 그게 많이 아쉽다. 🥲

 

여러 문제를 풀다보니 이제 골드 5 정도의 BFS, DFS 문제는 무난하게 해결할 수 있을 것 같다는 자신이 든다. 앞으로 취직을 뽀개기 전까지 꾸준히 정진하자.

 

🔥 - Java 코드

 


  
package G5_13549_숨바꼭질3;
import java.io.*;
import java.util.*;
public class Main {
public static int N, M, result = 0;
public static int[] arr;
public static void main(String[] args) throws IOException {
//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader br = new BufferedReader(new FileReader("src/input.txt"));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
int max = Math.max(N, M);
arr = new int[(max + 1) * 2];
Arrays.fill(arr, -1);
BFS(N);
}
public static void BFS(int n) {
Queue<Integer> queue = new LinkedList<>();
arr[n] = 0;
queue.add(n);
while (!queue.isEmpty()) {
int temp = queue.poll();
if (temp == M) {
System.out.println(arr[temp]);
System.exit(0);
}
if (temp - 1 >= 0 && arr[temp - 1] == -1 || arr[temp - 1] > arr[temp] + 1) {
arr[temp - 1] = arr[temp] + 1;
queue.add(temp - 1);
}
if (temp + 1 < M * 2 && (arr[temp + 1] == -1 || arr[temp + 1] > arr[temp] + 1)) {
arr[temp + 1] = arr[temp] + 1;
queue.add(temp + 1);
}
if (temp * 2 < M * 2 && (arr[temp * 2] == -1 || arr[temp * 2] > arr[temp])) {
arr[temp * 2] = arr[temp];
queue.add(temp * 2);
}
}
}
}
  1. 🔥 - Java 코드
'알고리즘/문제' 카테고리의 다른 글
  • [BFS] - G5_7576_토마토
  • [구현] - G5_21608_상어 초등학교
  • [다익스트라] - G3_11779_최소 비용 구하기2
  • [구현] - G4_17144_미세먼지 안녕!
Casteira
Casteira
할 뿐
Casteira
SpongeCake
Casteira
전체
오늘
어제
  • __Main__ (104)
    • 알고리즘 (65)
      • 개념 (6)
      • 문제 (58)
    • 컴퓨터 구조 (9)
      • 자료 구조 (2)
      • OS (7)
    • 웹 (1)
      • 자바 (1)
      • 스프링 (5)
      • SQL (0)
    • 기록 (4)
      • 포트폴리오 (2)
    • 정글 (18)
      • TIL (17)

블로그 메뉴

  • 🗒️ 깃허브
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • 코딩테스트
  • annotation
  • spring
  • java
  • 정글
  • 백준 골드
  • framework
  • 크래프톤 정글
  • 크래프톤
  • dp
  • springboot
  • 백준

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
Casteira
[BFS] - G5_13549_숨바꼭질 3
테마상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.