[BOJ] 5567. 결혼식

2022. 12. 11. 16:54·algorithm

문제

상근이는 자신의 결혼식에 학교 동기 중 자신의 친구와 친구의 친구를 초대하기로 했다. 상근이의 동기는 모두 N명이고, 이 학생들의 학번은 모두 1부터 N까지이다. 상근이의 학번은 1이다.


상근이는 동기들의 친구 관계를 모두 조사한 리스트를 가지고 있다. 이 리스트를 바탕으로 결혼식에 초대할 사람의 수를 구하는 프로그램을 작성하시오.


입력
첫째 줄에 상근이의 동기의 수 n (2 ≤ n ≤ 500)이 주어진다. 둘째 줄에는 리스트의 길이 m (1 ≤ m ≤ 10000)이 주어진다. 다음 줄부터 m개 줄에는 친구 관계 ai bi가 주어진다. (1 ≤ ai < bi ≤ n) ai와 bi가 친구라는 뜻이며, bi와 ai도 친구관계이다.


출력
첫째 줄에 상근이의 결혼식에 초대하는 동기의 수를 출력한다.


해결 방법

  • dfs나 bfs를 사용하는 문제
  • 이번 문제에서는 list를 사용하여 상근이의 동기를 표현했다.
  • 노드로 주어지므로 방문 배열의 크기는 n+1이다.
  • 상근이의 학번이 1이므로 1부터 dfs를 한다.
  • depth를 0부터 시작하고 2가 되면 종료시킨다.
    • 상근이의 친구의 친구까지 초대할 것이기 때문이다.
  • 동기 리스트에 있으면 방문 배열에 동기 번호를 인덱스로 하여 방문 처리 한다.
  • 방문 배열을 2부터 반복문을 돌며 방문 배열이 true 상태이면 count++ 한다.
  • count를 출력한다.

코드

// 결혼식
public class Week08_5567 {
    static int num;
    static List<List<Integer>> friends;
    static boolean[] visited;
    static int count = 0;

    public static void main(String[] args) throws IOException {
        input();
        dfs(1, 0);
        output();
    }

    private static void dfs(int n, int depth) {
        if (depth == 2) {
            return;
        }

        for (int i : friends.get(n)) {
            visited[i] = true;
            dfs(i, depth + 1);
        }
    }

    private static void output() throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for (int i = 2; i < visited.length; i++) {
            if (visited[i]) {
                count++;
            }
        }
        bw.write(count + "");
        bw.flush();
        bw.close();
    }

    private static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        num = Integer.parseInt(br.readLine());
        friends = new ArrayList<>();
        for (int i = 0; i <= num; i++) {
            friends.add(new ArrayList<>());
        }

        visited = new boolean[num + 1];
        StringTokenizer st;
        int m = Integer.parseInt(br.readLine());
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            friends.get(a).add(b);
            friends.get(b).add(a);
        }
    }
}
저작자표시 (새창열림)

'algorithm' 카테고리의 다른 글

[BOJ] 1003. 피보나치 함수  (1) 2022.12.11
[BOJ] 4963. 섬의 개수  (0) 2022.12.11
[BOJ] 2178. 미로탐색  (0) 2022.12.11
[BOJ] 1303. 전쟁 - 전투  (0) 2022.12.11
[BOJ] 2606. 바이러스  (0) 2022.12.11
'algorithm' 카테고리의 다른 글
  • [BOJ] 1003. 피보나치 함수
  • [BOJ] 4963. 섬의 개수
  • [BOJ] 2178. 미로탐색
  • [BOJ] 1303. 전쟁 - 전투
siio
siio
  • siio
    siio's blog
    siio
  • 전체
    오늘
    어제
    • category (47)
      • Projects (4)
      • Java (1)
      • Spring (0)
      • DevOps (0)
      • algorithm (42)
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DP
    git #github #협업프로세스
    SWYP
    http only cookie
    BufferedReader
    Knapsack
    ncp
    jre
    JDK
    외판원순회
    10971
    jvm
    risingcamp
    Cross Domain
    same site
    Scanner
    dfs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
siio
[BOJ] 5567. 결혼식
상단으로

티스토리툴바