Skip to content

Commit 6199af3

Browse files
authored
Merge pull request #63 from solid-connection/JAEHEE25
[Week09] BOJ 25395: 커넥티드 카 실험
2 parents be2a254 + 639affb commit 6199af3

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package week09.BOJ_25395_커넥티드카실험;
2+
3+
import java.util.*;
4+
import java.lang.*;
5+
import java.io.*;
6+
7+
class BOJ25395 {
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringTokenizer st1 = new StringTokenizer(br.readLine());
11+
int N = Integer.parseInt(st1.nextToken());
12+
int S = Integer.parseInt(st1.nextToken());
13+
Car[] cars = new Car[N + 1];
14+
boolean[] visit = new boolean[N + 1];
15+
16+
//초기 위치, 연료 입력
17+
st1 = new StringTokenizer(br.readLine());
18+
StringTokenizer st2 = new StringTokenizer(br.readLine());
19+
for (int i = 1; i <= N; i++) {
20+
cars[i] = new Car(Integer.parseInt(st1.nextToken()), Integer.parseInt(st2.nextToken()));
21+
}
22+
23+
Queue<Integer> connected = new LinkedList<>();
24+
connected.offer(S);
25+
visit[S] = true;
26+
int minNum = S; //연결된 차 중 가장 작은 번호
27+
int maxNum = S; //연결된 차 중 가장 큰 번호
28+
int minPos = cars[S].pos; //이동 가능 범위 minPos ~ maxPos
29+
int maxPos = cars[S].pos;
30+
31+
while (!connected.isEmpty()) {
32+
int nowNum = connected.poll();
33+
34+
//이동 범위 업데이트
35+
minPos = Math.min(cars[nowNum].pos - cars[nowNum].fuel, minPos);
36+
maxPos = Math.max(cars[nowNum].pos + cars[nowNum].fuel, maxPos);
37+
38+
//왼쪽으로 이동하면서 연결되는 차들 큐에 넣기
39+
for (int l = minNum - 1; l >= 1; l--) {
40+
if (minPos > cars[l].pos) break;
41+
if (!visit[l]) { //갈 수 있는 위치일 경우 연결
42+
connected.offer(l);
43+
visit[l] = true;
44+
minNum = Math.min(minNum, l);
45+
}
46+
}
47+
48+
//오른쪽으로 이동하면서 연결되는 차들 큐에 넣기
49+
for (int r = maxNum + 1; r <= N; r++) {
50+
if (cars[r].pos > maxPos) break;
51+
if(!visit[r]) { //갈 수 있는 위치일 경우 연결
52+
connected.offer(r);
53+
visit[r] = true;
54+
maxNum = Math.max(maxNum, r);
55+
}
56+
}
57+
}
58+
59+
//출력
60+
StringBuilder answer = new StringBuilder();
61+
for (int i = minNum; i <= maxNum; i++) {
62+
answer.append(i).append(" ");
63+
}
64+
65+
System.out.println(answer);
66+
}
67+
68+
}
69+
70+
class Car {
71+
int pos;
72+
int fuel;
73+
74+
Car(int pos, int fuel) {
75+
this.pos = pos;
76+
this.fuel = fuel;
77+
}
78+
}

0 commit comments

Comments
 (0)