πŸ“œ μ½”λ”©ν…ŒμŠ€νŠΈ/BAEKJOON\λ°±νŠΈλž˜ν‚Ή

λ°±μ€€ 14889번 : μŠ€νƒ€νŠΈμ™€ 링크 (JAVA) 문제 풀이

2021. 1. 11. 17:30
λͺ©μ°¨
  1. 문제 뢄석
  2. 전체 μ½”λ“œ
λ°˜μ‘ν˜•

www.acmicpc.net/problem/14889

 

14889번: μŠ€νƒ€νŠΈμ™€ 링크

예제 2의 κ²½μš°μ— (1, 3, 6), (2, 4, 5)둜 νŒ€μ„ λ‚˜λˆ„λ©΄ 되고, 예제 3의 κ²½μš°μ—λŠ” (1, 2, 4, 5), (3, 6, 7, 8)둜 νŒ€μ„ λ‚˜λˆ„λ©΄ λœλ‹€.

www.acmicpc.net

 

 



 

문제 뢄석

체크해야 ν•  것

  • 예λ₯Ό λ“€μ–΄, 4λͺ…μ˜ μ„ μˆ˜λ₯Ό νŒ€ A, B 둜 λ‚˜λˆ΄μ„ λ•Œ -> λͺ¨λ“  경우의 νŒ€ ꡬ성을 κ΅¬ν•œ λ’€, κ·Έ νŒ€μ˜ λŠ₯λ ₯치λ₯Ό λ‹€ λ”ν•΄μ„œ 차이가 κ°€μž₯ μž‘μ€ 값을 좜λ ₯ ν•˜λ©΄ λœλ‹€.
  • 차이가 0이 되면 더이상 λ‹€λ₯Έ 경우의 수λ₯Ό 따져보지 μ•Šμ•„λ„ λœλ‹€. (μ‹œκ°„ λ³΅μž‘λ„ 쀄이기)

 

νŒ€ μ •ν•˜κΈ°

  • μ„ μˆ˜ 1, 2, 3, 4κ°€ μžˆλ‹€κ³  ν•˜λ©΄, 각 νŒ€μ—λŠ” 2λͺ… μ”© λ‚˜λˆ„λ©΄ λœλ‹€. 
    • 예λ₯Ό λ“€μ–΄, νŒ€ A에 μ„ μˆ˜(1, 2)κ°€ 있으면, μžλ™μœΌλ‘œ λ‚˜λ¨Έμ§€ νŒ€ Bμ—λŠ” (3, 4)κ°€ λ“€μ–΄κ°€λŠ” 것이닀. 

1, 2, 3, 4 쀑에 νŒ€ A 에 (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) 이런 μ‹μœΌλ‘œ κ°€λŠ₯ν•˜λ‹€. νŒ€ B λŠ” μžλ™μœΌλ‘œ λ‚˜λ¨Έμ§€ μ„ μˆ˜λ“€μ΄ λ˜λ―€λ‘œ, μ’…λ£Œ μ‘°κ±΄μ—μ„œ  λ”°λ‘œ μ²˜λ¦¬ν•΄μ£Όλ©΄ λœλ‹€.

 

그럼 μž¬κ·€ ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•  λ•Œ, λ°˜λ³΅λ¬Έμ€ λͺ¨λ“  μ„ μˆ˜μ˜ 절반 횟수만 λŒλ©΄μ„œ depth λ₯Ό 1μ”© μΆ”κ°€ν•˜λ©΄μ„œ μž¬κ·€ 호좜 ν•˜λ©΄ λ˜κ² λ‹€.

μ΄λ²ˆμ—λ„ νŒ€μ„ μ‚¬μš©ν–ˆλŠ”μ§€ μ²΄ν¬ν•˜λŠ” boolean[] isUsed; λ₯Ό μ‚¬μš©ν•  것이닀.

int[] team_star = new int[N/2];		// Star νŒ€
int[] team_link = new int[N/2];		// Link νŒ€
boolean[] isUsed = new boolean[N];	// μ„ μˆ˜ μ‚¬μš© μ—¬λΆ€

 

 

μž¬κ·€ ν•¨μˆ˜ κ΅¬ν˜„

private static void dfs(int index) {
    
    /* μ’…λ£Œ 쑰건 */
    if (index == N / 2) {       // indexκ°€ N/2κ°€ 되면 μ’…λ£Œ!
        int idx = 0;
        for (int i = 0; i < N; i++) {
        
        /* λ‚˜λ¨Έμ§€ μ„ μˆ˜λ“€ linkνŒ€μ— λ„£κΈ°! */    
            if (!isContains(i)) {   // starνŒ€μ΄ μ•„λ‹Œ λ©€λ²„λ§Œ linkνŒ€μ— μΆ”κ°€!
                team_Link[idx++] = i;
            }
        }

        check_team_stat();      // νŒ€μ˜ λŠ₯λ ₯치 차이 μ΅œμ†Œ 값을 κ΅¬ν•˜λŠ” λ©”μ†Œλ“œ 호좜!
        return;
    }

    for (int i = 0; i < N; i++) {
        if (!isUsed[i]) {       // λ°©λ¬Έ μ•ˆν•œ i만
            isUsed[i] = true;
            team_star[index] = i;   // λ¨Όμ € starνŒ€μ— λ„£μ–΄μ€€λ‹€. μž¬κ·€μ˜ depthκ°€ indexκ°€ λœλ‹€.
            dfs(index + 1); // λ‹€μ‹œ λ‹€μŒ 멀버λ₯Ό 뽑기 μœ„ν•΄ μž¬κ·€ 호좜
            for (int j = i + 1; j < N; j++) {
                isUsed[j] = false;  // (1,2) 와 (2,1) 같은 쀑볡을 ν”Όν•˜κΈ° μœ„ν•΄ ν˜„μž¬ iκ°’ μ΄ν›„λ‘œλ§Œ false 처리 ν•΄μ€€λ‹€.
            }
        }
    }
}

/* νŒ€μ˜ λŠ₯λ ₯치λ₯Ό κ³„μ‚°ν•΄μ„œ μ΅œμ†Œ 값을 κ΅¬ν•˜λŠ” λ©”μ†Œλ“œ */
private static void check_team_stat() {
    int result1 = 0;
    int result2 = 0;

    for (int i : team_star) {
        for (int j : team_star) {
            result1 += status[i][j];
        }
    }
    for (int i : team_Link) {
        for (int j : team_Link) {
            result2 += status[i][j];
        }
    }

    int n = Math.abs(result1 - result2);

    // λŠ₯λ ₯ 차이가 0이면 더이상 μ΅œμ†Œ 값을 ꡬ할 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ—
    // 0을 좜λ ₯μ‹œν‚€κ³ , μ’…λ£Œ ν•˜λ©΄ λœλ‹€.
    if (n == 0) {
        System.out.println(0);
        System.exit(0);
    } else {
        // n = n >= 0 ? n : -n;
        MIN = Math.min(MIN, n);
    }
}

/* star νŒ€μ˜ μ†ν•œ 멀버인지 μ²΄ν¬ν•˜λŠ” λ©”μ†Œλ“œ  */
private static boolean isContains(int id) {
    for (int i : team_star) {
        if (i == id) return true;
    }
    return false;
}

 

 

전체 μ½”λ“œ

λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
  1. 문제 뢄석
  2. 전체 μ½”λ“œ
'πŸ“œ μ½”λ”©ν…ŒμŠ€νŠΈ/BAEKJOON\λ°±νŠΈλž˜ν‚Ή' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • λ°±μ€€ 14888번 : μ—°μ‚°μž λΌμ›Œλ„£κΈ° (JAVA) 문제 풀이
  • λ°±μ€€ 9663번 : N-Queen (JAVA) 문제 풀이
  • λ°±μ€€ 15650번 : Nκ³Ό M(2) (JAVA) 문제 풀이
  • λ°±μ€€ 15649번 : Nκ³Ό M(1) (JAVA) 문제 풀이
iseunghan
iseunghan
κΎΈμ€€ν•˜κ²Œ μ—΄μ‹¬νžˆ..
iseunghan
iseunghan

곡지사항

  • μ–΄μ œλ³΄λ‹€ λ‚˜μ€ 였늘이 되기 μœ„ν•΄ πŸ”₯
  • λΆ„λ₯˜ 전체보기 (261)
    • πŸ’ Spring (14)
      • κ°œλ… 및 이해 (2)
      • Spring 핡심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB μ ‘κ·Ό 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • μžλ°” ORM ν‘œμ€€ JPA ν”„λ‘œκ·Έλž˜λ° (20)
      • μ•Œκ³ λ¦¬μ¦˜, 자료ꡬ쑰 (13)
      • λ””μžμΈ νŒ¨ν„΄ (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • πŸ”– Snippets (3)
      • Javascript (3)
    • βš™οΈ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • πŸ“¬ Kafka (1)
    • πŸ’¬ ETC.. (4)
      • πŸ’» macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (2)
    • πŸ“š Databases (15)
      • 였라클둜 λ°°μš°λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 개둠과 μ‹€μŠ΅(2판) (3)
      • RealMySQL 8.0 (8)
    • πŸ”₯ Computer Science (5)
      • πŸ“‘ λ„€νŠΈμ›Œν¬ (5)
    • 🏷️ ν˜‘μ—… (1)
    • πŸ“œ μ½”λ”©ν…ŒμŠ€νŠΈ (38)
      • BAEKJOON\μˆ˜ν•™ 1, μˆ˜ν•™ 2 (8)
      • BAEKJOON\μž¬κ·€ (5)
      • BAEKJOON\브루트 포슀 (3)
      • BAEKJOON\μ •λ ¬ (1)
      • BAEKJOON\λ°±νŠΈλž˜ν‚Ή (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이뢄탐색 (1)
      • BAEKJOON\λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° (9)
      • BAEKJOON\그리디 μ•Œκ³ λ¦¬μ¦˜ (0)
    • ✨ ISEUNGHAN (1)

인기 κΈ€

졜근 κΈ€

전체
였늘
μ–΄μ œ
λ°˜μ‘ν˜•
hELLO Β· Designed By μ •μƒμš°.
iseunghan
λ°±μ€€ 14889번 : μŠ€νƒ€νŠΈμ™€ 링크 (JAVA) 문제 풀이
μƒλ‹¨μœΌλ‘œ

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

κ°œμΈμ •λ³΄

  • ν‹°μŠ€ν† λ¦¬ ν™ˆ
  • 포럼
  • 둜그인

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.