๐Algorithm/๐ฅBaekjoon
[Baekjoon] 11060_์ ํ ์ ํ
๋ฟ์ผ._.
2023. 6. 12. 17:33
๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/11060)
< ์ ํ ์ ํ >
๋ฌธ์ ํ์ด
bfs๋ฅผ ํ์ฉํ๋ฉฐ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋ ์นธ์ผ๋ก ๊ฐ๊ธฐ ์ํด ์ต์ ๋ช ๋ฒ ์ ํ๋ฅผ ํด์ผ ํ๋์ง๋ฅผ ๊ตฌํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _11060_ { // ์ ํ ์ ํ
static int arr[], visited[], n;
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n=Integer.parseInt(bf.readLine());
arr=new int[n];
visited=new int[n];
st=new StringTokenizer(bf.readLine());
for(int i=0; i<n; i++) {
arr[i]=Integer.parseInt(st.nextToken());
visited[i]=-1;
}
visited[0]=0;
bfs(0);
System.out.println(visited[n-1]);
}
private static void bfs(int num) {
Queue<Integer>queue=new LinkedList<>();
queue.add(num);
while(!queue.isEmpty()) {
int idx=queue.poll();
int temp=arr[idx];
for(int i=1; i<=temp; i++) {
if(idx+i<n && (visited[idx+i]==-1 || visited[idx+i]>visited[idx]+1)) {
visited[idx+i]=visited[idx]+1;
queue.add(idx+i);
}
}
}
}
}
Main
- ๋ฏธ๋ก ํฌ๊ธฐ (n) ์ ๋ ฅ
- arr : ๋ฏธ๋ก ์ ๋ณด ์ ์ฅ
visited : ์ต์ ์ ํ ํ์ ์ ์ฅ
- ๊ฐ์ฅ ์ผ์ชฝ์์ ์์ํ๋ฏ๋ก visited์ 0๋ฒ์งธ๋ฅผ 0์ผ๋ก ์ ์ฅ ๋ฐ bfs ํจ์ ํธ์ถ
- visited์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋ ๊ฐ ์ถ๋ ฅ
bfs(์์ ์์น num)
- queue์ ์์ ์์น ์ถ๊ฐ
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> ๋ฏธ๋ก ์นธ์ ์ฐ์ฌ ์๋ ์๋งํผ ๋ฐ๋ณตํ์ฌ ๋ฏธ๋ก ๋ฒ์ ์์ด๋ฉฐ, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๊ฑฐ๋ ์ต์ ์ ํ ์๋ฅผ ์ ๋ฐ์ดํธ ๊ฐ๋ฅํ๋ฉด visited ๊ฐ ์ ์ฅ ๋ฐ queue์ ์ถ๊ฐ
๋ง๋ฌด๋ฆฌ๐ค