Backend
home
🔠

[백준] 팰린드롬 만들기

생성일
2025/02/07 04:51
태그
BaekJoon
게시일
2025/02/07
최종 편집 일시
2025/02/07 05:29

문제

해결 방안 고민

- 특정 문자열을 입력 했을 때 해당 문자열로 팰린드롬을 만들 수 있는 케이스가 존재하는 경우 해당 케이스의 팰린드롬 문자열 출력 - 여러 개인 경우 사전 순으로 앞서는 것을 출력 - 팰린드롬 만드는 게 불가능하다면 "I'm Sorry Hansoo" 를 출력 // 입력 받기 br.readLine(); // 해당 문자열로 팰린드롬을 만들 수 있는지를 확인해야 함 // 모든 케이스를 고려할 수 있는 로직 구현 필요
Java
복사

해결 방법

홀수 번 등장한 알파벳이 두 개 이상일 경우 return “I’m Sorry Hansoo”.
홀수 번 등장한 알파벳이 한 개는 저장
등장한 알파벳은 사전 순서대로 절반을 생성
홀수 번 등장한 알파벳이 있으면 중앙에 추가
절반을 생성한 팰린드롬을 reverse() 를 이용하여 뒤집고 추가

코드

import java.io.*; // 팰린드롬 만들기 - 실버 3 // 홀수 번 등장한 알파벳이 두 개 이상인 경우 return "I'm Sorry Hansoo" // 홀수 번 등장한 알파벳이 한 개인 경우 저장 // 등장한 알파벳은 사전 순서대로 절반 생성 // 홀수 번 등장한 알파벳이 있으면 중앙에 추가 // 절반을 생성한 팰린드롬을 reverse()를 이용하여 뒤집고 추가 public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 문자열 입력 String str = br.readLine(); String palindrome = createPalindrome(str); // 함수로 팰린드롬 케이스 처리 bw.write(palindrome); br.close(); bw.flush(); bw.close(); } public static String createPalindrome(String name) { int[] alphabetCount = new int[26]; // 알파벳 등장 횟수 저장할 배열 // 입력된 이름에서 각 알파벳의 등장 횟수를 세어 배열에 저장 for (char c : name.toCharArray()) { alphabetCount[c - 'A']++; } StringBuilder halfPalindrome = new StringBuilder(); // 팰린드롬의 절반을 저장할 문자열 char oddCharacter = 0; // 홀수 번 등장한 알파벳 저장할 변수 // 각 알파벳 등장 횟수 확인하면서 팰린드롬의 절반을 구성 for (int i = 0; i < 26; i++) { // 홀수 번 등장한 알파벳이 두 개 이상일 경우 팰린드롬 생성 불가능 if (alphabetCount[i] % 2 == 1) { if (oddCharacter != 0) { return "I'm Sorry Hansoo"; } // 홀수 번 등장한 알파벳 저장 oddCharacter = (char)('A' + i); } // 알파벳 등장 횟수의 절반을 이용하여 팰린드롬의 절반을 생성 for (int j = 0; j < alphabetCount[i] / 2; j++) { halfPalindrome.append((char)('A' + i)); } } StringBuilder palindrome = new StringBuilder(halfPalindrome.toString()); // 홀수 번 등장한 알파벳이 있다면 중앙에 추가하여 전체 팰린드롬 생성 if (oddCharacter != 0) { palindrome.append(oddCharacter); } // 팰린드롬의 절반을 뒤집어서 전체 팰린드롬 생성 - reverse() 활용 // 만약에 reverse() 를 활용할 수 없다면 거꾸로 출력할 수 있는 반복문으로 구현 palindrome.append(halfPalindrome.reverse()); // 생성된 팰린드롬 반환 return palindrome.toString(); } }
Java
복사