From acc55c2542068f45c45f281650def9304550a3b7 Mon Sep 17 00:00:00 2001 From: mordiumaco Date: Thu, 9 Jul 2020 01:32:24 +0900 Subject: [PATCH] =?UTF-8?q?1-4=20=EB=AC=B8=EC=9E=90=EC=97=B4=20=EB=82=B4?= =?UTF-8?q?=20=EB=A7=88=EC=9D=8C=EB=8C=80=EB=A1=9C=20=EC=A0=95=EB=A0=AC?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EC=8B=A4=ED=8C=A8=ED=95=9C=20=EC=97=B0?= =?UTF-8?q?=EC=82=B0=EC=9E=84=20=EC=A3=BC=EB=A7=90=EC=97=90=20=EB=8B=A4?= =?UTF-8?q?=EC=8B=9C=20=EB=8F=84=EC=A0=84=EC=98=88=EC=A0=95..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Solution.java" | 110 +++++++++++++++++- 1 file changed, 108 insertions(+), 2 deletions(-) diff --git "a/week1/4. \353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/Solution.java" "b/week1/4. \353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/Solution.java" index a37b2fe..c18e907 100644 --- "a/week1/4. \353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/Solution.java" +++ "b/week1/4. \353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/Solution.java" @@ -1,11 +1,117 @@ +import java.util.Arrays; + /* 4. 문자 내마음대로 정렬하기 https://programmers.co.kr/learn/courses/30/lessons/12915 */ -class Solution { +class Solution4 { + + public static void main(String[] args) { + + Solution4 sol = new Solution4(); + + String[] strArray = { "abce", "abcd", "cdx" }; + int nthChar = 2; + + sol.solution(strArray, nthChar); + + } public String[] solution(String[] strings, int n) { - return null; + + String[] tempStringArray = new String[strings.length]; + + mergeSort(strings, 0, strings.length - 1, n, tempStringArray); + + System.out.println(Arrays.toString(strings)); + + return strings; + } + + public void mergeSort(String[] strArray, int start, int end, int n, String[] tempStringArray) { + + if (start < end) { + + int medium = (start + end) / 2; + + mergeSort(strArray, start, medium, n, tempStringArray); + mergeSort(strArray, medium + 1, end, n, tempStringArray); + + int i = start; + int j = medium + 1; + int k = start; + while (i <= medium && j <= end) { + if (strArray[i].charAt(n) < strArray[j].charAt(n)) { + + tempStringArray[k++] = strArray[i++]; + + } else if (strArray[i].charAt(n) == strArray[j].charAt(n)) { + + int tempIndexDownCount = 1; + int tempIndexUpperCount = 1; + + boolean isFinished = false; + + while ((n - tempIndexDownCount) != 0) { + if (strArray[i].charAt(n - tempIndexDownCount) < strArray[j].charAt(n - tempIndexDownCount)) { + + tempStringArray[k++] = strArray[i++]; + isFinished = true; + break; + } else if (strArray[i].charAt(n - tempIndexDownCount) == strArray[j] + .charAt(n - tempIndexDownCount)) { + + } else { + tempStringArray[k++] = strArray[j++]; + } + + ++tempIndexDownCount; + + } + + while (!isFinished && (n + tempIndexUpperCount) != strArray[i].length() - 1) { + if (strArray[i].charAt(n + tempIndexUpperCount) < strArray[j].charAt(n + tempIndexUpperCount)) { + + tempStringArray[k++] = strArray[i++]; + isFinished = true; + break; + } else if (strArray[i].charAt(n + tempIndexUpperCount) == strArray[j] + .charAt(n + tempIndexUpperCount)) { + + } else { + tempStringArray[k++] = strArray[j++]; + } + + ++tempIndexUpperCount; + } + + if (!isFinished && strArray[i].length() > strArray[j].length()) { + tempStringArray[k++] = strArray[j++]; + } else if (!isFinished && strArray[i].length() < strArray[j].length()) { + tempStringArray[k++] = strArray[i++]; + } else { + tempStringArray[k++] = strArray[j++]; + } + + } else { + + tempStringArray[k++] = strArray[j++]; + + } + } + + while (i <= medium) { + tempStringArray[k++] = strArray[i++]; + } + while (j <= end) { + tempStringArray[k++] = strArray[j++]; + } + for (int c = start; c <= end; c++) { + strArray[c] = tempStringArray[c]; + } + + } + } }