From 05fd3cfb4398eb808abe6abf38a336a015706c7b Mon Sep 17 00:00:00 2001 From: LiiNi-coder <97495437+LiiNi-coder@users.noreply.github.com> Date: Thu, 29 Jan 2026 16:43:51 +0900 Subject: [PATCH] =?UTF-8?q?[20260129]=20BOJ=20/=20G3=20/=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=20=EC=A0=95=EB=A6=AC=20(small)=20/=20=EC=9D=B4?= =?UTF-8?q?=EC=9D=B8=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\224 \354\240\225\353\246\254 (small).md" | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 "LiiNi-coder/202601/29 BOJ \355\217\264\353\215\224 \354\240\225\353\246\254 (small).md" diff --git "a/LiiNi-coder/202601/29 BOJ \355\217\264\353\215\224 \354\240\225\353\246\254 (small).md" "b/LiiNi-coder/202601/29 BOJ \355\217\264\353\215\224 \354\240\225\353\246\254 (small).md" new file mode 100644 index 00000000..6133a66f --- /dev/null +++ "b/LiiNi-coder/202601/29 BOJ \355\217\264\353\215\224 \354\240\225\353\246\254 (small).md" @@ -0,0 +1,103 @@ +```java +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class Main{ + static class Folder{ + String name; + Set folders; + Set files; + Map lowerFileCountAtName; + Folder(String name){ + this.name = name; + folders = new HashSet<>(); + files = new HashSet<>(); + } + void addFolder(Folder target){ + this.folders.add(target); + } + void addFile(String fileName){ + this.files.add(fileName); + } + Map getLowerFileCount(){ + if(lowerFileCountAtName == null){ + this.lowerFileCountAtName = new HashMap<>(); + //해당 폴더의 파일 취합 + Iterator iterFile = files.iterator(); + while(iterFile.hasNext()){ + String fileName = iterFile.next(); + lowerFileCountAtName.put(fileName, lowerFileCountAtName.getOrDefault(fileName, 0) + 1); + } + + //dfs로 가장 안쪽까지 가서 해당 폴더의 lowerFileCountAtName을 구함 + Iterator iter = folders.iterator(); + while(iter.hasNext()){ + Folder childFolder = iter.next(); + Map lfcOfChildFolder = childFolder.getLowerFileCount(); + for(Map.Entry entry : lfcOfChildFolder.entrySet()){ + lowerFileCountAtName.put(entry.getKey(), lowerFileCountAtName.getOrDefault(entry.getKey(), 0) + entry.getValue()); + } + } + } + + return lowerFileCountAtName; + } + } + private static int N, M, Q; + private static Map FolderAtName; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + FolderAtName = new HashMap<>(); + try{ + createFolder("main"); + }catch(NullPointerException e){ + throw new RuntimeException("createFolder 에러"); + } + String[] tokens = br.readLine().split(" "); + N = Integer.parseInt(tokens[0]); + M = Integer.parseInt(tokens[1]); + + for(int i = 0; i0){ + tokens = br.readLine().split("/"); + Folder target = FolderAtName.get(tokens[tokens.length-1]); + Map temp = target.getLowerFileCount(); + int answer = 0; + for(int c : temp.values()){ + answer += c; + } + System.out.println(temp.size() + " " + answer); + } + br.close(); + } + + private static Folder createFolder(String name) { + FolderAtName.putIfAbsent(name, new Folder(name)); + return FolderAtName.get(name); + } +} +```