From 6cabdce4a231e13523a2db98fae2ba8aee708032 Mon Sep 17 00:00:00 2001 From: Donew <47556347+03do-new30@users.noreply.github.com> Date: Tue, 18 Feb 2025 22:22:29 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[20250218]=20BOJ=20/=20=EA=B3=A8=EB=93=9C5?= =?UTF-8?q?=20/=20=EB=8B=A4=EC=9D=8C=20=ED=8C=B0=EB=A6=B0=EB=93=9C?= =?UTF-8?q?=EB=A1=AC=20/=20=EC=8B=A0=EB=8F=99=EC=9C=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\353\223\234\353\241\254 \354\210\230.md" | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 "03do-new30/202502/18 BOJ G5 \353\213\244\354\235\214 \355\214\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" diff --git "a/03do-new30/202502/18 BOJ G5 \353\213\244\354\235\214 \355\214\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" "b/03do-new30/202502/18 BOJ G5 \353\213\244\354\235\214 \355\214\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" new file mode 100644 index 00000000..6dc24b3c --- /dev/null +++ "b/03do-new30/202502/18 BOJ G5 \353\213\244\354\235\214 \355\214\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" @@ -0,0 +1,63 @@ +```java +import java.io.*; +import java.util.*; +import java.math.BigInteger; + +public class Main { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringBuilder input = new StringBuilder(br.readLine()); + int n = input.length(); + + // target은 input + 1부터 시작한다. + BigInteger addOne = new BigInteger(input.toString()).add(BigInteger.ONE); + StringBuilder target = new StringBuilder(addOne.toString()); + + // 팰린드롬 만들기 + makePalindrome(target); + + // input보다 큰 팰린드롬이 만들어지지 않은 경우 + // mid를 기준으로 앞부분을 자르고, +1을 수행해 앞부분을 증가시켜본다. + BigInteger inputBigInt = new BigInteger(String.valueOf(input)); + BigInteger targetBigInt = new BigInteger(String.valueOf(target)); + if (inputBigInt.compareTo(targetBigInt) >= 0) { + int mid; + if (n % 2 == 0) { + mid = n/2; + } else { + mid = n/2 + 1; + } + + String head = target.substring(0, mid); + String newHead = new BigInteger(head).add(BigInteger.ONE).toString(); + + for (int i = 0; i < mid; i++) { + target.setCharAt(i, newHead.charAt(i)); + } + // newHead가 head보다 길어질 수 있음. (ex. 99 -> 101) + if (newHead.length() != head.length()) { + target = new StringBuilder(head.substring(0, 1)).append(target); + } + // 앞부분을 증가시킨 target으로 다시 팰린드롬을 만든다. + makePalindrome(target); + } + System.out.println(target.toString()); + br.close(); + } + + private static void makePalindrome(StringBuilder target) { + int n = target.length(); + int mid; + if (n % 2 == 0) { + mid = n/2; + } else { + mid = n/2 + 1; + } + // mid를 기준으로 뒤에 있는 숫자들을 앞에 있는 숫자들에 맞춘다. + for ( int i = 0; i < mid ; i++ ) { + if (target.charAt(i) == target.charAt(n-1-i)) { continue; } + target.setCharAt(n-1-i, target.charAt(i)); + } + } +} +``` From fcd3216b322cbd6ee17a29d989cb315f4f113e69 Mon Sep 17 00:00:00 2001 From: Donew <47556347+03do-new30@users.noreply.github.com> Date: Tue, 18 Feb 2025 22:32:15 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[20250218]=20BOJ=20/=20=EA=B3=A8=EB=93=9C5?= =?UTF-8?q?=20/=20=EB=8B=A4=EC=9D=8C=20=ED=8C=B0=EB=A6=B0=EB=93=9C?= =?UTF-8?q?=EB=A1=AC=20/=20=EC=8B=A0=EB=8F=99=EC=9C=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" | 4 ---- 1 file changed, 4 deletions(-) diff --git "a/03do-new30/202502/18 BOJ G5 \353\213\244\354\235\214 \355\214\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" "b/03do-new30/202502/18 BOJ G5 \353\213\244\354\235\214 \355\214\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" index 6dc24b3c..71d03f49 100644 --- "a/03do-new30/202502/18 BOJ G5 \353\213\244\354\235\214 \355\214\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" +++ "b/03do-new30/202502/18 BOJ G5 \353\213\244\354\235\214 \355\214\260\353\246\260\353\223\234\353\241\254 \354\210\230.md" @@ -34,10 +34,6 @@ public class Main { for (int i = 0; i < mid; i++) { target.setCharAt(i, newHead.charAt(i)); } - // newHead가 head보다 길어질 수 있음. (ex. 99 -> 101) - if (newHead.length() != head.length()) { - target = new StringBuilder(head.substring(0, 1)).append(target); - } // 앞부분을 증가시킨 target으로 다시 팰린드롬을 만든다. makePalindrome(target); }