Baekjoon

백준 1213번: 팰린드롬 만들기

Isaac01 2024. 10. 19. 15:08
반응형

 

 

 

 

문제의 핵심 

- 입력한 순서와 상관없이 A~Z순으로 정렬된다.

- 입력한 알파벳의 절반은 오름차순으로 절반은 내림차순으로 정렬된다.

- 홀수개인 알파벳 수가 둘 이상이면 팰린드롬을 만들 수 없다.

 

'CCBBA'을 입력했을 때, 출력 값은 'BCACB'이다.

'CACCC'을 입력했을 때, 출력 값은 'CCACC'이다.

'ABACABA'을 입력했을 때, 출력 값은 'AABCBAA'이다.

 

팰린드롬 특징을 보면, 홀수개인 알파벳은 A~Z순서 상관없이 가운대로 오고

나머지 알파벳은 절반은 오름차순으로, 다른 절반은 내림차순으로 정렬된다.

알파벳을 개수를 파악해 홀수개인 알파벳이 2개 이상이면 "I'm Sorry Hansoo"를 출력한다.

 

 

 

 

 

 

1. 기초작업

정렬한 값을 넣어줄 StringBuffer함수 생성

각 알파벳의 개수를 구한다.

 

 

 

2. check라는 함수를 통해 입력된 값이 팰린드롬을 만들 수 있는지 확인

알파벳 개수를 2로 나웠을 때 그 값이 0이 아니면(짝수가 아니면),  check의 값은 +1 증가하고

check값이 2이상이면  check에는 false값이 들어간다.

 

 

 

3. 만약 입력한 값이 팰린더롬을 만들 수 있는 값이면, if문을 실행.

3-1. 알파벳이 짝수개 일 때

alpha[i] / 2를 해줘서 입력한 알파벳의 절반만큼 fir함수에 넣어준다.

i + 65를 해주는 이유는 0 = A, B = 1, C = 2, D = 3... 임으로

i + 65를 해주고 이를 (char)로 형변환을 한다음에 fir함수에 문자를 삽입한다.

3-2. 알파벳이 홀수개 일 때

알파벳이 홀수개 여도 알파벳 개수의 절반은 fir함수에 삽입해야 한다.

예를 들어 'AAAAABB'가 입력됐을 때, (AAAAA = 5개) 5 / 2 = 2임으로 'A'를 반복문을 통해 2번 삽입하고

남은 'A'를 mid에 저장해야 한다.

 

 

 

4. fir값을 end에 삽입 후 reverse() 함수를 통해 문자열을 뒤집어 준다.

풀어서 설명하면 'AAAAABB'가 입력됐다고 가정하면, fir에는 'AAB'가 삽입되어 있고, 

mid에는 'A', end에는  fir값을 대입해 reverse() 함수를 통해 뒤집어 주면 end에는 'BAA'가 삽입된다. 

마지막으로 fir, mid, end순으로 값을 출력하면 'AABABAA'라는 값이 나오게 된다.

 

 

 

 

 

 

정답코드