특정 거리의 도시 찾기
혼자선 못풀었는데 같은 스터디원의 아이디어를 참조하여 풀었다.
Distance만 사용하면 되는 문제였고 이전의 거리 합+1 이 그 node에서의 거리인것을 인지를 못하고 풀어서..
어제 꽤 오래 걸려서 풀었는데 다음부터는 이런실수 안하겠지..?
import java.io.*;
import java.util.*;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String first = br.readLine();
List<Integer> answer = new ArrayList<>();
StringTokenizer st = new StringTokenizer(first);
Deque<Integer> queue1 = new ArrayDeque<>();
int N=Integer.parseInt(st.nextToken());
int M=Integer.parseInt(st.nextToken());;
int K=Integer.parseInt(st.nextToken());;
int X=Integer.parseInt(st.nextToken());;
int[] vitsted = new int[N];
Deque<Integer>[] nodes = new Deque[N];
for(int i=0; i<N;i++){
nodes[i]=new ArrayDeque<>();
}
for(int i=0; i<N;i++){
vitsted[i]=-1;
}
for(int i=0;i<M;i++){
String s = br.readLine();
st=new StringTokenizer(s);
int a=Integer.parseInt(st.nextToken());
int b=Integer.parseInt(st.nextToken());
nodes[a-1].add(b-1);
}
queue1.offer(X-1);
vitsted[X-1]++;
while (!queue1.isEmpty()){
int index = queue1.poll();
for(int item : nodes[index]){
if(vitsted[item]==-1){
vitsted[item]=vitsted[index]+1;
queue1.offer(item);
}
}
}
for(int i=0;i<N;i++){
if(vitsted[i]==K)
answer.add(i+1);
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Collections.sort(answer,Comparator.naturalOrder());
if(answer.isEmpty())
bw.write("-1");
else{
for(int item:answer){
bw.write(Integer.toString(item));
bw.newLine();
}
}
bw.flush();
bw.close();
return;
}
}
'문제풀이' 카테고리의 다른 글
백준 4963번 섬의 개수 JAVA (0) | 2020.09.28 |
---|---|
백준 11060번 점프점프 JAVA (0) | 2020.09.21 |
카카오 2019 공채 실패율 문제 JAVA 풀이 (0) | 2020.09.16 |
백준 18310번 안테나 JAVA (0) | 2020.09.16 |
백준 16234번 인구이동(JAVA) (0) | 2020.09.11 |