문제 풀이/백준
[백준] 1058번. 친구(JAVA)
27200
2025. 1. 9. 15:39
문제
https://www.acmicpc.net/problem/1058
풀이(21분)
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
boolean[][] friend = new boolean[n][n];
HashMap<Integer, Set<Integer>> map = new HashMap<>();
for(int i = 0; i < n; i++){
String input = br.readLine();
Set<Integer> set = new HashSet<>();
map.put(i, set);
for(int j = 0; j < n; j++){
if(input.charAt(j) == 'Y'){
friend[i][j] = true;
map.get(i).add(j);
}
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(friend[i][j]){
for(int k = 0; k < n; k++){
if(friend[j][k] && i != k){
map.get(i).add(k);
}
}
}
}
}
int answer = 0;
for(int i = 0; i < n; i++){
answer= Math.max(answer, map.get(i).size());
}
System.out.println(answer);
}
}
HashMap을 통해 한 명마다 각 2 친구를 저장할 수 있는 집합을 만든다. 집합으로 선언하는 이유는 중복되더라도 자동적으로 처리되게 만들기 위해서이다.
이후 입력을 받으며 각 직접 연관된 친구를 모두 체크해두고, 나머지 친구의 친구를 체크하는 방식을 이용했다.
하지만, 실제로는 set의 이터레이터를 이용해서 친구의 친구를 체크할 때 더욱 효율적인 방식을 활용할 수 있을 것 같다.