728x90
https://www.acmicpc.net/problem/13913
우엑 꽝 기각
...중략...
q.offer(new Location(N, new StringBuilder().append(N)));
...중략...
while(!q.isEmpty()){
Location l = q.poll();
...중략...
ways=l.way.toString();
}
}
if(l.x+1<=100000 && load[l.x+1]==0){
load[l.x+1]=load[l.x]+1;
q.offer(new Location(l.x+1,new StringBuilder(l.way).append(" ").append(l.x + 1)));
}
...중략...
}
static class Location{
int x; // 위치
StringBuilder way;
public Location(int x, StringBuilder way){
this.x = x;
this.way =way;
}
}
}
초반에는 위치 값과 진행 순서를 문자열로 저장하는 클래스를 선언하여 문제를 풀이하려 했다.
그러나 이전에도 겪었듯이 문자열 클래스를 사용하는 것은 메모리상에도 접근하는 시간 상에도 큰 부담을 줄 수 있다는 것을 알고 있기에
변동성을 생각하여 StringBuilder로 변경하였지만 내가 볼땐 새로 Stringbuilder를 선언하는 것 또한 부담이 없지 않은 것 같다고 판단하였다.
위와 같은 이유로 이전에 배열 문제를 풀 때 많이 적용했었던 이전 경로를 저장하는 방식으로 풀이에 접근하였다.
package BKD_0x9_BFS;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
public class BOJ_13913 {
static int[] load = new int[100001];
static int[] parent = new int[100001];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int N = sc.nextInt();
int K = sc.nextInt();
parent[N]=-1;
getDst(N,K);
Stack<Integer> st = new Stack<>();
int way = K;
while(way!=-1){
st.push(way);
way = parent[way];
}
while(!st.isEmpty()){
sb.append(st.pop()+" ");
}
System.out.println(load[K]-1);
System.out.println(sb.toString());
}
static void getDst(int N, int K){
Queue<Integer> q = new LinkedList<>();
q.offer(N);
load[N]=1; // 시간 체크
while(!q.isEmpty()){
int current = q.poll();
if(current == K){
break;
}
if(current+1<=100000 && load[current+1]==0){
load[current+1]=load[current]+1;
parent[current+1] = current;
q.offer(current+1);
}
if(current-1>=0 && load[current-1]==0){
load[current-1]=load[current]+1;
parent[current-1] = current;
q.offer(current-1);
}
if(current*2<=100000 && load[current*2]==0){
load[current*2]=load[current]+1;
parent[current*2] = current;
q.offer(current*2);
}
}
}
}
경로 추출에 필요한 방법을 생각하는데에 시간을 쪼오오오오로올오롱로오오롤오꼼 더 썼던 문제였다.
728x90
'🐣 알고리즘 삐약 > 💻 백준 삐약' 카테고리의 다른 글
71 삐약 : 백준 1463| 1로만들기 [바킹독 문제 풀이|DP|JAVA] (0) | 2024.06.13 |
---|---|
70 삐약 : 백준 4179| 불! [바킹독 문제 풀이|BFS|JAVA] (0) | 2024.06.12 |
68 삐약 : 백준 2573| 빙산 [바킹독 문제 풀이|BFS|JAVA] (1) | 2024.06.09 |
67 삐약 : 백준 5427| 불 [바킹독 문제 풀이|BFS|JAVA] (0) | 2024.06.07 |
66 삐약 : 백준 13549| 숨바꼭질3 [바킹독 문제 풀이|BFS|JAVA] (0) | 2024.06.04 |