From dcabbccae3a3e85ced69722c3ea9907040e69339 Mon Sep 17 00:00:00 2001 From: rt3310 Date: Tue, 5 Sep 2023 12:53:56 +0900 Subject: [PATCH] =?UTF-8?q?solve(=EC=95=95=EC=B6=95,=20=ED=94=84=ED=94=84?= =?UTF-8?q?=EB=A0=8C=EC=A6=884=EB=B8=94=EB=A1=9D):=20wonho=5F230905?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "wonho/week26/\354\225\225\354\266\225.java" | 48 +++++++++++++ ...354\246\2104\353\270\224\353\241\235.java" | 72 +++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 "wonho/week26/\354\225\225\354\266\225.java" create mode 100644 "wonho/week26/\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235.java" diff --git "a/wonho/week26/\354\225\225\354\266\225.java" "b/wonho/week26/\354\225\225\354\266\225.java" new file mode 100644 index 0000000..1a8e3dc --- /dev/null +++ "b/wonho/week26/\354\225\225\354\266\225.java" @@ -0,0 +1,48 @@ +import java.util.*; + +class 압축 { + private Map indexes = new HashMap<>(); + private int currentIndex = 1; + + public int[] solution(String msg) { + initMap(); + + List result = new ArrayList<>(); + int start = 0; + + while (start < msg.length()) { + int end = start + 1; + while (end <= msg.length()) { + String sub = msg.substring(start, end); + if (indexes.get(sub) == null) { + indexes.put(sub, currentIndex); + currentIndex++; + result.add(indexes.get(msg.substring(start, end - 1))); + start = end - 1; + break; + } + end++; + } + if (start != end - 1) { + start++; + continue; + } + + if (start == msg.length() - 1 || indexes.get(msg.substring(start)) != null) { + result.add(indexes.get(msg.substring(start))); + start++; + } + } + if (result.size() == 0) { + result.add(indexes.get(msg.substring(0))); + } + return result.stream().mapToInt(i -> i).toArray(); + } + + public void initMap() { + for (char c = 'A'; c <= 'Z'; c++) { + indexes.put(String.valueOf(c), currentIndex); + currentIndex++; + } + } +} \ No newline at end of file diff --git "a/wonho/week26/\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235.java" "b/wonho/week26/\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235.java" new file mode 100644 index 0000000..81fa167 --- /dev/null +++ "b/wonho/week26/\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235.java" @@ -0,0 +1,72 @@ +package week26; + +import java.util.*; + +class 프렌즈4블록 { + private char[][] map; + + public int solution(int m, int n, String[] board) { + int answer = 0; + map = new char[m][n]; + + for (int i = 0; i < m; i++) { + map[i] = board[i].toCharArray(); + } + + while (true) { + boolean transformed = false; + char[][] prevMap = new char[m][n]; + for (int i = 0; i < m; i++) { + prevMap[i] = Arrays.copyOf(map[i], n); + } + + for (int i = 0; i < m - 1; i++) { + for (int j = 0; j < n - 1; j++) { + char stand = prevMap[i][j]; + if (stand == '0') { + continue; + } + if (stand != prevMap[i + 1][j] || stand != prevMap[i][j + 1] || stand != prevMap[i + 1][j + 1]) { + continue; + } + transformed = true; + if (map[i][j] != '0') { + answer++; + map[i][j] = '0'; + } + if (map[i + 1][j] != '0') { + answer++; + map[i + 1][j] = '0'; + } + if (map[i][j + 1] != '0') { + answer++; + map[i][j + 1] = '0'; + } + if (map[i + 1][j + 1] != '0') { + answer++; + map[i + 1][j + 1] = '0'; + } + } + } + if (!transformed) { + return answer; + } + + for (int col = 0; col < n; col++) { + for (int row = m - 1; row >= 0; row--) { + if (map[row][col] == '0') { + int start = row; + while (start >= 0 && map[start][col] == '0') { + start--; + } + if (start == -1) { + break; + } + map[row][col] = map[start][col]; + map[start][col] = '0'; + } + } + } + } + } +} \ No newline at end of file