https://www.acmicpc.net/problem/5107
5107번: 마니또
N명의 사람들이 있다. 이들은 각자 다른 한 명의 이름이 적힌 쪽지를 받아서, 그 사람에게 몰래 선행을 베푼다. 이때 자기 자신의 이름을 받을 수는 없으며, 선행을 받은 사람은 누가 자신을 도와
www.acmicpc.net
문제
코드
맞았습니다가 뜬 코드입니다. - 메모리 16080KB | 시간 148ms | 코드 길이 1517B
import java.io.*;
import java.util.*;
public class Main {
private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static boolean[] visited;
private static int cnt;
public static void main(String[] args) throws IOException {
int t = 0;
while(true) {
int n = Integer.parseInt(bf.readLine());
if(n == 0) {
break;
} else {
t ++;
cnt = 0;
int[][] node = new int[n][n];
ArrayList<String> name = new ArrayList<>();
for(int i = 0 ; i < n ; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine());
String x = st.nextToken();
String y = st.nextToken();
if(!name.contains(x)) name.add(x);
if(!name.contains(y)) name.add(y);
node[name.indexOf(x)][name.indexOf(y)] = 1;
}
PriorityQueue<Integer> graph = new PriorityQueue<>();
visited = new boolean[n];
for(int i = 0 ; i < n ; i++) {
if(!visited[i]) {
bfs(graph, node, i);
}
}
bw.write(Integer.toString(t) + " " + Integer.toString(cnt) + "\n");
}
}
bf.close();
bw.flush();
bw.close();
}
private static void bfs(PriorityQueue<Integer> graph, int[][] node, int n) {
visited[n] = true;
graph.poll();
for(int i = 0 ; i < node.length ; i++) {
if(node[n][i] == 1) {
if(!visited[i]) {
graph.add(i);
bfs(graph, node, i);
} else cnt ++;
}
}
}
}
문제와 출력이 무슨 말인지 몰라서 약간 헤맸습니다 ;;
0은 n에 대한 입력이라 테스트 케이스가 몇 번째인지에 대한 t, 사이클 개수를 알아내면 되는 문제였습니다.
입력받은 이름을 숫자형태로 바꾸어 bfs로 푸는 방식으로 하였습니다.
자바의 HashMap을 써보고 싶어서 푼 문제인데 해시맵으로 푸는게 오히려 더 비효율적일 것 같아서 그냥 배열로 했습니다. 해시맵 쓰는 건 다른 문제로 다시 도전해봐야겠네요. 해시맵이라기 보다는 그냥 탐색 문제였던듯..
'코딩테스트' 카테고리의 다른 글
[백준] 1309번 '동물원' - Java (0) | 2023.07.23 |
---|---|
[백준] 1261번 '알고스팟' - Java (0) | 2023.07.22 |
[백준] 1043번 '거짓말' - Java (1) | 2023.07.19 |
[백준] 1092번 '배' - Java (1) | 2023.07.18 |
[백준] 1068번 '트리' - Java (1) | 2023.07.17 |