Post

boj-1018-친구

boj_1058_친구

🙋‍♂️들어가며

이번 문제는 이해를 기반으로 한 배열 응용 문제이다


문제

문제

지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람이 친구이거나, A와 친구이고, B와 친구인 C가 존재해야 된다. 여기서 가장 유명한 사람은 2-친구의 수가 가장 많은 사람이다. 가장 유명한 사람의 2-친구의 수를 출력하는 프로그램을 작성하시오.

A와 B가 친구면, B와 A도 친구이고, A와 A는 친구가 아니다.

입력

첫째 줄에 사람의 수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 각 사람이 친구이면 Y, 아니면 N이 주어진다.

출력

첫째 줄에 가장 유명한 사람의 2-친구의 수를 출력한다.

풀이

2단계 친구가 되는법

사람 A와 B가 2단계 친구가 되기 위해서는

  • A가 B의 친구
  • A와 친구이고, B와 친구인 C가 존재할 것

도식으로 나타내면 다음과 같다

1
2
3
A-B

A-C-B

다음 사진은 testcase-4 의 내용이다

1
2
3
4
5
6
7
8
9
10
11
10
NNNNYNNNNN
NNNNYNYYNN
NNNYYYNNNN
NNYNNNNNNN
YYYNNNNNNY
NNYNNNNNYN
NYNNNNNYNN
NYNNNNYNNN
NNNNNYNNNN
NNNNYNNNNN

Desktop View

본인을 제외하면 8개가 된다

Desktop View



그렇다면 코드로 보자

boolean[] friend 를 만들어서 각 사람별 친구 인원수를 2단계까지 파악하여 최대값 갱신을 하자

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;


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());
		char[][] arr = new char[N][N];
		for (int r = 0; r < N; r++) {
			arr[r] = br.readLine().toCharArray();
		}
		
		
		int cnt_max = Integer.MIN_VALUE;
		for (int r = 0; r < N; r++) {
			boolean[] friend = new boolean[N];
			int cur_cnt = 0;
			
			// 1단계 친구
			for (int c = 0; c < N; c++) {
				// 동일인물이면 skip
				if (r == c) continue;
				// Y라면 -> 친구
				if (arr[r][c] == 'Y') friend[c] = true;
				
				// 2단계 친구
				for (int d = 0; d < N; d++) {
					if (d != r && arr[r][c] == 'Y' && arr[c][d] == 'Y') friend[d] = true;
				}
			}
			
			// 비교
			for (int k = 0; k < N; k++) {
				if (friend[k] == true) {
					cur_cnt++;
				}
			}
			cnt_max = Math.max(cnt_max, cur_cnt);
		}
		
		
		System.out.println(cnt_max);
		
	}
}

}



제출결과 -> 0.068초

This post is licensed under CC BY 4.0 by the author.
3D GIF

Trending Tags

도움이 필요하면
나를 눌러 구리🐻
챗봇
너굴
bot
어서와 구리 ʕ ·ᴥ·ʔ
무엇이 필요하셔 구리?

Trending Tags

도움이 필요하면
나를 눌러 구리🐻
챗봇
너굴
bot
어서와 구리 ʕ ·ᴥ·ʔ
무엇이 필요하셔 구리?