baekjoon/String

백준 14725번 : 개미굴 [자바]

Meluu_ 2025. 6. 28. 08:55

 

🧫 문제 분석

 

✔️ 출처

개미 골드 3

 

📖 문제

 

트리로 풀어야하는데 Set이랑 문자열로 풀었다.

 

레벨 별 Set을 만들고 

Set에 현재 레벨의 문자열을 체크하면서 

추가한다. 

 

Tree 를 이용한 풀이를 꺼렸던게 

정렬때문이였는데

 

생각해보니 TreeMap이 있었다.

노드 만들어서 자식을 TreeMap에 넣고 진행하면 될 것 같다.

 


 

🔅 문제 풀이 [Set 풀이]

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

public class Main {
    static final int MAX_LEVEL = 15;

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

        String[] input = new String[n];
        Set<String>[] levels = new Set[MAX_LEVEL]; // 레벨에 따른 Set 생성 

        for (int i = 0; i < MAX_LEVEL; i++) {
            levels[i] = new HashSet<>();
        }

        for (int i = 0; i < n; i++) {
            input[i] = br.readLine();

            if (Character.isDigit(input[i].charAt(1))) {
                input[i] = input[i].substring(3);
            } else {
                input[i] = input[i].substring(2);
            }
        }

        Arrays.sort(input);
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < n; i++) {
            StringBuilder check = new StringBuilder();
            int idx = 0;
            
            for (String str : input[i].split(" ")) {
                check.append(str);

                if (!levels[idx].contains(check.toString())) {
                    levels[idx].add(check.toString());
                    sb.append("--".repeat(idx)).append(str);
                    sb.append("\n");
                }
                idx++;
            }
        }
        System.out.print(sb.toString());
    }
}

 

 

 

❗ 오답노트 / 필요한 지식

  1. 자꾸 사소한 곳에서 실수하는데 숫자가 15까지 입력될 수 있는데 이걸 캐치못해서 당황한게 좀 그렇다.
  2. 문제 풀이는 이렇게 해보자
    1. 문제의 조건과 입력 길이, 크기 ,타입 등 면밀히 분석
    2. 문제 접근 방법 생각 (그리면서)
    3. 사용할 수 있는 자료구조 찾기
    4. 풀이