내가 생각했을때 문제에서 원하는부분
첫째 줄에 사람의 수 N이 주어진다.
N은 50보다 작거나 같은 자연수이다.
둘째 줄부터 N개의 줄에 각 사람이 친구이면 Y, 아니면 N이 주어진다.
첫째 줄에 가장 유명한 사람의 2-친구의 수를 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용하여 입력을 받는다.
첫번째 줄에서 사람의 수 N을 읽고, 이어서 N개의 줄에서 친구 관계를 읽어 2D 배열 friends에 저장한다.
각 사람 i에 대해, twoFriends 배열을 사용하여 해당 사람의 2-친구를 찾는다.
사람 i의 친구 j를 찾고, 그 친구 j의 친구들을 확인하여 i와 친구가 아닌 경우에만 twoFriends[k]를 true로 만들어준다.
그리고 각 사람의 2-친구 수를 계산한 후, 가장 많은 2-친구를 가진 사람의 수를 출력한다.
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 1058번 문제
public class Main850 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
char[][] friends = new char[N][N];
// 친구 관계 입력 받기
for(int i = 0; i < N; i++) {
friends[i] = br.readLine().toCharArray();
}
int maxTwoFriends = 0;
// 모든 사람에 대해 2-친구 수 계산
for(int i = 0; i < N; i++) {
boolean[] twoFriends = new boolean[N];
// i의 친구들 찾기
for(int j = 0; j < N; j++) {
if(friends[i][j] == 'Y') {
twoFriends[j] = true; // 직접 친구
// j의 친구들 찾기
for(int k = 0; k < N; k++) {
if(friends[j][k] == 'Y' && k != i) {
twoFriends[k] = true; // 2-친구
}
}
}
}
// 2-친구 수 세기
int twoFriendCount = 0;
for(int j = 0; j < N; j++) {
if(twoFriends[j]) {
twoFriendCount++;
}
}
// 최대 2-친구 수 갱신
maxTwoFriends = Math.max(maxTwoFriends, twoFriendCount);
}
// 결과 출력
System.out.println(maxTwoFriends);
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.