우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

πŸ‘¨πŸ»‍πŸ’» PS/바킹독

[JAVA] λ°±μ€€ 2660번 【G5.회μž₯뽑기】

2023. 9. 15. 14:59

문제

 

2660번: 회μž₯뽑기

μž…λ ₯의 첫째 μ€„μ—λŠ” νšŒμ›μ˜ μˆ˜κ°€ μžˆλ‹€. 단, νšŒμ›μ˜ μˆ˜λŠ” 50λͺ…을 λ„˜μ§€ μ•ŠλŠ”λ‹€. λ‘˜μ§Έ 쀄 μ΄ν›„λ‘œλŠ” ν•œ 쀄에 두 개의 νšŒμ›λ²ˆν˜Έκ°€ μžˆλŠ”λ°, 이것은 두 νšŒμ›μ΄ μ„œλ‘œ μΉœκ΅¬μž„μ„ λ‚˜νƒ€λ‚Έλ‹€. νšŒμ›λ²ˆν˜ΈλŠ” 1λΆ€ν„°

www.acmicpc.net

 

 

풀이

1️⃣ ν”Œλ‘œμ΄λ“œ μ•Œκ³ λ¦¬μ¦˜ μ‚¬μš©

πŸ’‘ λ– μ˜€λ₯Έ Idea

μ²˜μŒμ— λ¬Έμ œκ°€

'μ–΄λŠ νšŒμ›μ΄ λ‹€λ₯Έ λͺ¨λ“  νšŒμ›κ³Ό 친ꡬ이면, 이 νšŒμ›μ˜ μ μˆ˜λŠ” 1점이닀. μ–΄λŠ νšŒμ›μ˜ μ μˆ˜κ°€ 2점이면, λ‹€λ₯Έ λͺ¨λ“  νšŒμ›μ΄ μΉœκ΅¬μ΄κ±°λ‚˜ 친ꡬ의 μΉœκ΅¬μž„μ„ λ§ν•œλ‹€. λ˜ν•œ μ–΄λŠ νšŒμ›μ˜ μ μˆ˜κ°€ 3점이면, λ‹€λ₯Έ λͺ¨λ“  νšŒμ›μ΄ μΉœκ΅¬μ΄κ±°λ‚˜, 친ꡬ의 μΉœκ΅¬μ΄κ±°λ‚˜, 친ꡬ의 친ꡬ의 μΉœκ΅¬μž„μ„ λ§ν•œλ‹€.'

라고 λ‚˜μ™€μžˆμ–΄μ„œ μ΄ν•΄ν•˜κΈ°κ°€ νž˜λ“€μ—ˆμ—ˆλ‹€.

근데, 이 문제λ₯Ό μ§κ΄€μ μœΌλ‘œ μ΄ν•΄ν•΄λ³΄λ‹ˆ

'νŠΉμ • νšŒμ›μ΄ μžˆμ„ λ•Œ κ°€μž₯ 사이가 λ¨Ό νšŒμ›μ€ λͺ‡λͺ…을 κ±°μ³μ„œ κ°€μ•Όν•˜λŠ”κ°€'

둜 ν•΄μ„ν•˜λ©΄ 됨을 μ•Œ 수 μžˆμ—ˆλ‹€.

λ”°λΌμ„œ, ν”Œλ‘œμ΄λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 νŠΉμ • νšŒμ›μ΄ λ‹€λ₯Έ νšŒμ›μ— λ„λ‹¬ν•˜λŠ” λΉ„μš©μ„ ν”Œλ‘œμ΄λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•˜μ—¬ κ΅¬ν•˜κ³ 

각 νšŒμ› 별 μ΅œλŒ€ λΉ„μš©μ„ κ΅¬ν•œ λ’€, κ·Έ λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜κ³  ν•΄λ‹Ή μ΅œμ†Ÿκ°’μ„ κ°–λŠ” νšŒμ›λ“€μ„ λͺ¨λ‘ κ΅¬ν•˜λ©΄ 끝이 λ‚  것 이닀.

 

public class Main {

    public static void main(String[] args) throws IOException {
        final int MAX = 100;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        int[][] graph = new int[N][N];

        // 자기 μžμ‹ μœΌλ‘œ κ°€λŠ” 경둜 외에 μ΅œλŒ€κ°’μœΌλ‘œ λ³€ν™˜
        for (int r = 0; r < N; r++) {
            for (int c = 0; c < N; c++) {
                if (r == c) {
                    graph[r][c] = 0;
                } else {
                    graph[r][c] = MAX;
                }
            }
        }


        // κ°€μž₯ κ°€κΉŒμš΄ μ‚¬μ΄λŠ” 1둜 λ¨Όμ € μž…λ ₯ν•΄μ€Œ
        while (true) {
            String[] input = br.readLine().split(" ");
            if (input[0].equals("-1")) {
                break;
            }

            int u = Integer.parseInt(input[0] )- 1;
            int v = Integer.parseInt(input[1]) - 1;
            graph[u][v] = 1;
            graph[v][u] = 1;
        }

        // ν”Œλ‘œμ΄λ“œ μ•Œκ³ λ¦¬μ¦˜ 적용
        for (int m = 0; m < N; m++) {
            for (int u = 0; u < N; u++) {
                for (int v = 0; v < N; v++) {
                    graph[u][v] = Math.min(graph[u][v], graph[u][m] + graph[m][v]);
                }
            }
        }


        // 맡에 점수 별 νšŒμ›λ“€μ„ 기둝
        Map<Integer, List<Integer>> scores = new HashMap<>();
        int minScore = MAX;

        for (int r = 0; r < N; r++) {
            int maxScoreByMember = Arrays.stream(graph[r]).max().getAsInt();
            minScore = Math.min(minScore, maxScoreByMember);
            if (scores.containsKey(maxScoreByMember)) {
                scores.get(maxScoreByMember).add(r + 1);
            } else {
                List<Integer> members = new ArrayList<>();
                members.add(r + 1);
                scores.put(maxScoreByMember, members);
            }
        }

        List<Integer> members = scores.get(minScore);

        StringBuilder sb = new StringBuilder();
        sb.append(minScore + " " + members.size() + "\n");
        for (int member : members) {
            sb.append(member + " ");
        }

        System.out.println(sb);

    }
}

 

κ²°κ³Ό

 

λ§ˆμ§€λ§‰μ— 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 과정을 μ œμ™Έν•˜λ©΄ ν”Œλ‘œμ΄λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆλŠ” λ¬Έμ œμ˜€λ‹€.

    'πŸ‘¨πŸ»‍πŸ’» PS/바킹독' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JAVA] λ°±μ€€ 2617번 【G4.ꡬ슬 찾기】
    • [JAVA] λ°±μ€€ 1707번 【G4.이뢄 κ·Έλž˜ν”„γ€‘
    • [JAVA] λ°±μ€€ 1781번 【G2.컡라면】
    • [JAVA] λ°±μ€€ 1655번 【G2.κ°€μš΄λ°λ₯Ό λ§ν•΄μš”γ€‘
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”