우규이인우윀
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] λ°±μ€€ 1707번 【G4.이뢄 κ·Έλž˜ν”„γ€‘

2023. 9. 17. 17:38

문제

 

1707번: 이뢄 κ·Έλž˜ν”„

μž…λ ₯은 μ—¬λŸ¬ 개의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλŠ”λ°, 첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수 Kκ°€ μ£Όμ–΄μ§„λ‹€. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 첫째 μ€„μ—λŠ” κ·Έλž˜ν”„μ˜ μ •μ μ˜ 개수 V와 κ°„μ„ μ˜ 개수 Eκ°€ 빈 칸을 사이에

www.acmicpc.net

 

풀이

1️⃣ 이뢄 κ·Έλž˜ν”„μ˜ μ •μ˜μ™€ bfs λ₯Ό μ΄μš©ν•œ 풀이

μ˜ˆμ „μ— ν’€μ–΄λ΄€λ˜ λ¬Έμ œμ—¬μ„œ, 원리λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆμ—ˆλ‹€.

 

이전에도, ν•œμ°Έμ„ κ³ λ―Όν–ˆμ—ˆλ‹€κ°€ μ„œμΉ­ν•΄μ„œ ν’€μ—ˆμ—ˆλŠ”λ°, 이뢄 κ·Έλž˜ν”„λΌλŠ” 단어가 λ‚˜μ˜€λ©΄ 이 μ •μ˜λ₯Ό μƒκ°ν•΄μ•Όν•œλ‹€.

 

이뢄 κ·Έλž˜ν”„μΈμ§€ μ•„λ‹Œμ§€ 확인할 수 μžˆλŠ” νŠΉμ§• 쀑 ν•˜λ‚˜μΈ,

 

λ…Έλ“œ κ·Έλž˜ν”„λ₯Ό 2개의 μƒ‰κΉ”λ‘œ μΉ ν–ˆμ„ λ•Œ, μΈμ ‘ν•˜λŠ” λ…Έλ“œλΌλ¦¬ 색이 κ²ΉμΉ˜μ§€ μ•Šκ²Œ 색칠할 수 μžˆμ„ λ•Œ, 이뢄 κ·Έλž˜ν”„κ°€ 될 수 μžˆλ‹€κ³  ν•œλ‹€.

 

μœ„μ™€ 같은 그림처럼 말이닀.

 

아직 λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ…Έλ“œλΌλ©΄ 1둜 체크해두고 bfs λ°©μ‹μœΌλ‘œ μ£Όλ³€ λ…Έλ“œλ₯Ό νƒμƒ‰ν•˜μ—¬ -1둜 ν‘œμ‹œν•˜κ²Œλ” ν•˜μ˜€λ‹€.

 

κ·Έλ ‡κ²Œ λͺ¨λ“  λ…Έλ“œλ₯Ό ν‘œμ‹œν•΄λ†“κ³ , λ‹€μ‹œ λͺ¨λ“  λ…Έλ“œλ₯Ό μˆœνšŒν•˜μ—¬ μ£Όλ³€ λ…Έλ“œμ— λ‹€λ₯Έ 숫자둜 λ§ˆν‚Ήλ˜μ–΄μžˆλŠ” λ…Έλ“œκ°€ μžˆλ‹€λ©΄ 이뢄 κ·Έλž˜ν”„κ°€ μ•„λ‹˜μ„ μ•Œ 수 μžˆλ‹€.

 

public class Main {
    static int V;
    static int[] checked;
    static Queue<Integer> q;
    static List<List<Integer>> nodes;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int K = Integer.parseInt(br.readLine());

        while (K-- > 0) {
            String[] input = br.readLine().split(" ");
            V = Integer.parseInt(input[0]);
            int E = Integer.parseInt(input[1]);

            nodes = new ArrayList<>();

            for (int i = 0; i < V; i++) {
                nodes.add(new ArrayList<>());
            }

            while (E-- > 0) {
                input = br.readLine().split(" ");
                int u = Integer.parseInt(input[0]) - 1, v = Integer.parseInt(input[1]) - 1;
                nodes.get(u).add(v);
                nodes.get(v).add(u);
            }

            checked = new int[V];
            q = new LinkedList<>();

            for (int i = 0; i < V; i++) {
                if (checked[i] == 0) {
                    q.offer(i);
                    checked[i] = 1;
                    bfs();
                }
            }

            if (checkBipartite()) {
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }


        }

    }

    private static boolean checkBipartite() {
        for (int i = 0; i < V; i++) {
            List<Integer> connects = nodes.get(i);
            int color = checked[i];
            for (int connect : connects) {
                if (checked[connect] == color) {
                    return false;
                }
            }
        }
        return true;
    }

    private static void bfs() {
        while (!q.isEmpty()) {
            int u = q.poll();
            List<Integer> connects = nodes.get(u);
            for (int connect : connects) {
                if (checked[connect] == 0) {
                    checked[connect] = checked[u] * -1;
                    q.offer(connect);
                }
            }
        }
    }
}

 

κ²°κ³Ό

 

이뢄 κ·Έλž˜ν”„μΈμ§€ μ•„λ‹Œμ§€λ₯Ό νŒλ‹¨ν•  수 μžˆλŠ” μ •μ˜λ₯Ό 잘 기얡해놓고 μžˆμ–΄μ•Όκ² λ‹€.

    'πŸ‘¨πŸ»‍πŸ’» PS/바킹독' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JAVA] λ°±μ€€ 1043번 【G4.거짓말】
    • [JAVA] λ°±μ€€ 2617번 【G4.ꡬ슬 찾기】
    • [JAVA] λ°±μ€€ 2660번 【G5.회μž₯뽑기】
    • [JAVA] λ°±μ€€ 1781번 【G2.컡라면】
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

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