본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 31217번 Y

by 현장 2026. 3. 3.

-Code

import java.io.*;
import java.util.*;

public class BOJ31217 {
    static int MOD = 1000000007;

    public static void main(String[] args) throws IOException {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        // 노트 초기화
        ArrayList<ArrayList<Integer>> nodes = new ArrayList<>();
        for (int i = 0; i <= n; i++) {
            nodes.add(new ArrayList<Integer>());
        }
        // 간선 받기
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int u = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());

            nodes.get(u).add(v);
            nodes.get(v).add(u);
        }
        // 탐색
        long answer = 0;
        for (int i = 1; i <= n; i++) {
            long cnt = nodes.get(i).size();
            answer += (cnt * (cnt - 1) * (cnt - 2) / 6) % MOD;
        }
        System.out.println(answer % MOD);
        br.close();
    }
}

처음에 그래프 문제라 어렵게 백트랙킹을 사용하려 했으나 로직 문제와 시간 초과 문제가 생겨서 힌트를 찾아보니 조합을 활용하는 문제라 해당 수식으로 해결했습니다.