[백준][C++] 1213-팰린드롬 만들기

2025. 4. 30. 21:00·알고리즘/문제풀이 :백준
목차
  1. 📌문제 설명
  2. 💡생각
  3. 🔥풀이

📌문제 설명

https://www.acmicpc.net/problem/1213

 

💡생각

만들수가 없는 조건

  • 알파벳 하나가 홀수 && 문자열 전체 길이가 짝수
  • 알파벳 두개가 홀수

팰린드롬을 만들 때 고려해야 하는 부분

  • 사전순으로 나와야 한다 -> A ~ Z 까지 확인하면서 먼저 나오는 알파벳을 앞쪽에 배치해준다.
  • 짝수일 때
    • 앞뒤로 하나씩 추가해준다
  • 홀수일 때 
    • 앞뒤로 하나씩 추가하면서  1개만 남았을 때 중앙에 배치해준다.

 

🔥풀이

#include <iostream>
#include <algorithm>

using namespace std;

/*
 * 만약 글의 길이가 홀수 일때 = 문자 1개 존재가 가능
 * 만약 글의 길이가 짝수 일때 = 문자 1개인거 존재 못함
 *
 * 안되는 조건
 * - 알파벳 하나가 홀수 일 때 && 문자열 전체 길이가 짝수
 * - 알파벳 두개가 홀수 일 때
 */
int main() {
    string str;

    cin >> str;
    int strLen = str.length();
    int arr[26] = {0,};
    char newStr[strLen];
    int count = 0;
    for(int i = 0; i < str.length(); i++){
        arr[str[i] - 65]++;
    }
    for(int i = 0; i < 26; i++){
        if(arr[i] % 2 != 0){
            count++;
        }
    }
    if(count >= 2 || (count == 1 && str.length()%2 == 0))
    {
        cout<<"I'm Sorry Hansoo";
        return 0;
    }
    int num = 0;
    strLen -= 1;
    for(int i = 0; i < 26; i++){
        if(arr[i] == 1){
            newStr[strLen / 2] = 65 + i;
        }
        else if(arr[i] % 2 == 0){
            while(arr[i]){
                newStr[num] = 65 + i;
                arr[i]--;
                newStr[strLen - num] = 65 + i;
                arr[i]--;
                num++;
            }
        }
        else if(arr[i] % 2 == 1){
            while(arr[i]){
                if(arr[i] == 1){
                    newStr[strLen / 2] = 65 + i;
                    arr[i]--;
                    break;
                }
                newStr[num] = 65 + i;
                arr[i]--;
                newStr[strLen - num] = 65 + i;
                arr[i]--;
                num++;

            }

        }
    }
    for(int i = 0; i < strLen + 1; i++){
        cout<<newStr[i];
    }
}

'알고리즘 > 문제풀이 :백준' 카테고리의 다른 글

[백준][C++] 10972 - 다음 순열 (next_permutation)  (0) 2025.05.04
[백준][C++] 1270-땅따먹기  (1) 2025.05.04
[백준][C++] 토너먼트  (0) 2025.04.29
[백준][c++] 1024-수열의 합  (0) 2025.04.13
[백준][c++] 1002-터렛  (0) 2025.04.13
  1. 📌문제 설명
  2. 💡생각
  3. 🔥풀이
'알고리즘/문제풀이 :백준' 카테고리의 다른 글
  • [백준][C++] 10972 - 다음 순열 (next_permutation)
  • [백준][C++] 1270-땅따먹기
  • [백준][C++] 토너먼트
  • [백준][c++] 1024-수열의 합
각쿄
각쿄
  • 각쿄
    개발일기
    각쿄
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • 알고리즘 (13)
        • 문제풀이 : 프로그래머스 (0)
        • 문제풀이 :백준 (13)
        • 알고리즘 개념 (0)
      • 자료구조 (2)
      • 기초 (0)
        • 운영체제 (0)
        • 디자인패턴 (0)
        • 웹 (0)
        • 컴퓨터 네트워크 (0)
      • Spring (0)
      • IT이슈 (0)
      • 자바(Java) (5)
      • 에러(Error) (2)
        • Mysql (1)
      • 활동 (0)
        • 혼공학습단13기 - 혼자 공부하는 컴퓨터구조 운영.. (0)
      • 기능 구현! (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    백준
    이분탐색
    mysql
    스택
    혼공학습단
    다이나믹 프로그래밍
    Stack
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
각쿄
[백준][C++] 1213-팰린드롬 만들기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.