Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SSAFY 테스트
- 우유가 옆으로 넘어지면 아야
- DFS
- 텐션 업 10기 화이팅
- SSAFY IM/A
- 텐션 업 10기!
- Hamming weight
- have a nice day
- 아자아자 화이팅
- DP
- 코로나 싫어요
- Have a good day :)
- SSAFY 화이팅
- SeongSeobDang
- 자고 싶다
- HAVE A GOOD DAY
- I am Korean
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- Have a nice day.
- 수학
- 우유아야
- 네트워크
- BFS
- 모르고리즘
- SSAFY 10기 화이팅
- 자료구조
- amazon
- Java 환경 설정
- 우유가옆으로넘어지면아야
Archives
- Today
- Total
Hope Everyone Is Happy
[골드5] 13549. 숨바꼭질 3 (Java) 본문
※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)
[골드5] 13549. 숨바꼭질 3 (Java)
J 크 2023. 10. 23. 21:40728x90
반응형
https://www.acmicpc.net/problem/13549
13549번: 숨바꼭질 3
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때
www.acmicpc.net
Thanks to Judy Lee ~22
※ 문제를 요약하면 아래와 같습니다.
▶ 수빈이는 동생이랑 숨바꼭질 중이며, 수빈이 는 점 N, 동생은 점 K에 위치
▶ 수빈이는 걷거나 순간이동이 가능 걷는다면 1초후에 현재 위치 +1, 현재 위치-1로 이동
▶ 순간이동을 하는 경우 현재 위치 *2의 값으로 이동
▶ 수빈이가 동생을 찾을 수 있는 가장 빠른 시간 출력
▶ Input : 첫번째 줄에 공백을 기준으로 수빈 위치 N, 동생 위치 K가 입력
▶ Output : 수빈이가 동생을 찾는 가장 빠른 시간 출력
◈ Input - 1
5 17
◈ Output - 1
2
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ 최소 시간 == 현재시간 *2, -1, +1 순서대로 BFS
▶ 이미 탐색한 곳은 방문 처리, N과 K 중 큰 수의 2배 크기로 boolean 배열 선언
▶ 현재 포인트와 시간을 저장하고 있는 Point 클래스 구현
▶ Point 중심으로 BFS 진행, K에 최초 도달 시 BFS 종료, Count 출력
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
class Point {
int m_nNum;
int m_nCount;
public Point(int m_nNum, int m_nCount) {
super();
this.m_nNum = m_nNum;
this.m_nCount = m_nCount;
}
}
public class Main {
static int N, K, nMax;
static boolean[] barrVisit;
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bReader.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
if(N > K)
nMax = N;
else
nMax = K;
barrVisit = new boolean[(nMax+1) * 2];
int nResult = BFS();
bWriter.write(String.valueOf(nResult));
bWriter.close();
}
private static int BFS() {
// TODO Auto-generated method stub
Queue<Point> qBFS = new LinkedList<>();
qBFS.add(new Point(N, 0));
barrVisit[N] = true;
while(!qBFS.isEmpty()) {
Point p = qBFS.poll();
int nPlus = p.m_nNum +1;
int nMinus = p.m_nNum -1;
int nMul = p.m_nNum * 2;
if(p.m_nNum == K) {
return p.m_nCount;
}
if(nMul < (nMax+1) * 2 && !barrVisit[nMul] ) {
barrVisit[nMul] = true;
qBFS.add(new Point(nMul, p.m_nCount));
}
if(nMinus >= 0 && !barrVisit[nMinus]) {
barrVisit[nMinus] = true;
qBFS.add(new Point(nMinus, p.m_nCount+1));
}
if(nPlus < (nMax+1) * 2 && !barrVisit[nPlus]) {
barrVisit[nPlus] = true;
qBFS.add(new Point(nPlus, p.m_nCount+1));
}
}
return 0;
}
}
Good Luck! (피드백 감사합니다!)
'※ 백준 (Baekjoon) > [Java] 문제 풀이 ( Solve the problems)' 카테고리의 다른 글
[골드4] 18223. 민준이와 마산 그리고 건우(Java) (3) | 2023.10.25 |
---|---|
[골드4] 15683. 감시 (Java) (0) | 2023.10.24 |
[골드5] 14891. 톱니바퀴 (Java) (0) | 2023.10.22 |
[골드4] 14502. 연구소 (Java) (2) | 2023.10.19 |
[골드4] 14500. 테트로미노 (Java) (0) | 2023.10.18 |