백준 친구

KIMYEONGJUN·2024년 11월 27일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 사람의 수 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();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글