[BOJ] 13549: 숨바꼭질3 (JAVA)

2024. 2. 23. 03:52·코테/Algorithm
728x90
 

13549번: 숨바꼭질 3

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

www.acmicpc.net

 

틀린 이유

 

그냥 와장창 틀렸다 .. 계속 1%에서 틀렸습니다.. 6%에서 틀렸습니다 .. 마지막엔 44%에서 틀렸습니다 ..

혼자 맞는데 왜 틀릴까 맞는데 왜 틀릴까 했는데

 

일단 방문처리를 해야하는 이유

: *2 한 곳에 방문할 때, 0회차니까, 방문처리 boolean 사용하지 않고 횟수만 map에 담아서 계산하면 이미 방문한 곳 또 방문할 수 있음..!

 

노드에 카운트 저장해야 하는 이유

: 노드에 카운트 저장하지 않고 map에 저장해두면 최단거리 구할 수 없음.

 

+ - 순서가 바뀌면 정답이 바뀌는 이유

: queue에 담긴 순서대로 방문 처리하면 남겨진 좌표 중에서 더 짧은 시간에 도달하는 좌표가 있더라도 갱신이 불가능하다.

이 코드에서는 K에 도달하는 순간 return 되기 때문에 더 짧은 시간에 도달하는 좌표가 있더라도 BFS 함수가 종료되기 때문에 갱신이 안되는 것이였다..!

 

아래는 이와 관련한 반례 .. 

4 6
+ - 순서인 경우 출력: 2 ( 4->5->6 )
- + 순서인 경우 출력: 1 ( 4->3->6 )
9 13
+ - 순서인 경우 출력: 4 ( 9->10->11->12->13)
- + 순서인 경우 출력: 3 (9->8->7->14->13)

 

알고리즘 .. 잘 풀고싶다 ..ㅠㅠ~~ 좀 더 정진해야겠군요 ..

 

package 백준renew;

import java.io.*;
import java.util.*;

public class 골드5_13549_숨바꼭질3 {
	static int N, K;
	static int answer = Integer.MAX_VALUE;
	static boolean visited[];
	static class Move{
		int x;
		int cnt;
		Move(int x, int cnt){
			this.x = x;
			this.cnt = cnt;
		}
	}
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		
		visited = new boolean[100001];
		
		BFS();
		
		System.out.println(answer);
		
	}
	static void BFS() {
		Queue<Move> queue = new LinkedList<>();
		queue.offer(new Move(N, 0));
		
		while(!queue.isEmpty()) {
			Move m = queue.poll();
			visited[m.x] = true;
			
			if(m.x == K) {
				answer = Math.min(answer, m.cnt);
				return;
			}
			
			if(m.x * 2 <= 100000 && !visited[m.x * 2]) {
				queue.offer(new Move(m.x*2, m.cnt));
			}
			if(m.x -1 >= 0 && !visited[m.x -1]) {
				queue.offer(new Move(m.x -1, m.cnt+1));
			}
			if(m.x + 1 <= 100000 && !visited[m.x + 1]) {
				queue.offer(new Move(m.x +1, m.cnt+1));
			}
		}
	}
}
728x90

'코테 > Algorithm' 카테고리의 다른 글

[BOJ] 11279: 최대 힙 (JAVA)  (1) 2024.02.27
[BOJ] 5635: 생일 (JAVA)  (2) 2024.02.25
[BOJ] 14940: 쉬운 최단거리 (JAVA)  (0) 2024.02.22
[BOJ] 21938: 영상처리 (JAVA)  (0) 2024.02.21
[BOJ] 14248: 점프점프 (JAVA)  (0) 2024.02.20
'코테/Algorithm' 카테고리의 다른 글
  • [BOJ] 11279: 최대 힙 (JAVA)
  • [BOJ] 5635: 생일 (JAVA)
  • [BOJ] 14940: 쉬운 최단거리 (JAVA)
  • [BOJ] 21938: 영상처리 (JAVA)
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (417)
      • App·Android (1)
      • BE (44)
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (11)
        • 스프링부트 시큐리티 & JWT (0)
        • PHP (6)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (17)
        • AI (7)
        • Bigdata (6)
        • Database (1)
        • 빅데이터분석기사 (2)
      • Infra (0)
      • Activity (0)
        • Education (0)
        • Intern (0)
        • 리모트 인턴십 6기 (0)
        • 구름톤 유니브 4기 (0)
        • SW교육기부단 15기 (0)
      • CS (8)
      • 취준 (13)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (3)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 회고 (0)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그래프탐색
    매개변수탐색
    브루트포스 알고리즘
    시뮬레이션
    그래프이론
    너비우선탐색
    오블완
    문자열
    투포인터
    백준
    자료구조
    정렬
    그리디알고리즘
    최단경로
    누적합
    구현
    수학
    다이나믹프로그래밍
    이분탐색
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[BOJ] 13549: 숨바꼭질3 (JAVA)
상단으로

티스토리툴바