일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Queue
- BFS
- 시뮬레이션
- DP
- 스택
- SQL
- Java
- oracle
- 문자열
- 백트래킹
- 브루트포스
- 새벽코딩
- HashMap
- 백준
- 다리 만들기
- 아스키코드
- BufferedReader
- Python
- LIS
- dfs
- 탐색
- 구현
- 프로그래머스
- 그리디
- 다이나믹프로그래밍
- 배열
- Stack
- 빅데이터
- 완전탐색
- 알고리즘
Archives
- Today
- Total
새벽코딩
[백준] [1213] 팰린드롬 만들기 본문
반응형
문제
임한수와 임문빈은 서로 사랑하는 사이이다.
임한수는 세상에서 팰린드롬인 문자열을 너무 좋아하기 때문에, 둘의 백일을 기념해서 임문빈은 팰린드롬을 선물해주려고 한다.
임문빈은 임한수의 영어 이름으로 팰린드롬을 만들려고 하는데, 임한수의 영어 이름의 알파벳 순서를 적절히 바꿔서 팰린드롬을 만들려고 한다.
임문빈을 도와 임한수의 영어 이름을 팰린드롬으로 바꾸는 프로그램을 작성하시오.
입력
첫째 줄에 임한수의 영어 이름이 있다. 알파벳 대문자로만 된 최대 50글자이다.
출력
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
예제 입력 1 복사
AABB
예제 출력 1 복사
ABBA
예제 입력 2 복사
AAABB
예제 출력 2 복사
ABABA
예제 입력 3 복사
ABACABA
예제 출력 3 복사
AABCBAA
예제 입력 4 복사
ABCD
예제 출력 4 복사
I'm Sorry Hansoo
※코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String input = br.readLine();
boolean flag = true;
int start = 0;
int end = input.length();
int[] alpa = new int[26];
char[] result = new char[end];
int hol = 0;
// 각 알파벳 개수 저장
for(int i=0;i<input.length();i++) {
alpa[input.charAt(i)-'A']++;
}
for(int i=0;i<alpa.length;i++) {
int n = alpa[i];
// 알파벳 개수 홀수일 경우
if(n%2 == 1) {
hol++; // 홀수 카운트 증가
// 미리 문자열 가운데에 넣어놓는다.
// 홀수일 경우에만
result[end/2] = (char) (i+'A');
// 카운트 감소
alpa[i]--;
}
if(hol >= 2) { // 홀수개가 2개이상일 경우 팰린드롬X
System.out.println("I'm Sorry Hansoo");
return;
}
}
end -= 1;
for(int i=0;i<alpa.length;i++) {
while(true) {
if(alpa[i] == 0) break;
// 한번에 앞뒤로 2개씩 카운트 증감하며 값 대입
result[start] = (char) (i+'A');
result[end] = (char) (i+'A');
start++;
end--;
// 2씩 감소
alpa[i]-=2;
}
}
// 출력 문자열 저장
for(int i=0;i<input.length();i++)
sb.append(result[i]);
/* output */
System.out.println(sb);
}
}
팰린드롬 문제는 풀때마다 신박한 문제라고 생각한다. 이번에는 문자열이 주어지고 해당 문자열이 팰린드롬이 가능한지 여부를 판단하고 만약, 가능하면 팰린드롬으로 만들어야하는 문제이다.
팰린드롬에서 개별 문자가 홀수인것이 2개이상일 경우에는 팰린드롬이 될 수 없으므로 바로 I'm Sorry Hansoo를 출력하고 종료하였다.
만약 개별문자가 홀수인것이 1개뿐이라면 정답 문자배열의 정가운데에 해당 문자를 넣어 미리 저장하였다.
그 이후 알파벳순으로 앞에서 부터 카운트를 두개씩 줄여가며 정답배열의 앞뒤로 값을 삽입했다.
만약 모든 문자가 짝수라면 바로 위의 과정만 진행하면 팰린드롬 수가 될 수 있다.
ABABC -> ABCBA
AABB -> ABBA
-새벽코딩-
반응형
'알고리즘' 카테고리의 다른 글
[백준] [1302] 베스트셀러 (0) | 2022.12.04 |
---|---|
[백준] [1120] 문자열 (0) | 2022.12.01 |
[백준] [14425] 문자열 집합 (0) | 2022.11.30 |
[백준] [1966] 프린터 큐 (0) | 2022.11.29 |
[백준] [2161] 카드1 (0) | 2022.11.28 |
Comments