Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 1158
- 스택의 특징
- C/C++ 구현
- 버킷 정렬
- 백준 1406
- 백준 17822
- 구현
- 백준 2447
- 5397
- 조세퍼스 순열
- 해시 구현
- 게리멘더링2
- heap
- 백준 17779
- 시간 복잡도
- 해시구현
- Stack 이란
- 1764
- ㅣ풀이
- AVL 시간 복잡도
- c#
- dfs
- 자료구조
- 백준 17471
- 백준
- qorwns
- 백준 5397
- 원판 돌리기
- 풀이
- 별 찍기 10
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 1213] 팰린드롬 만들기 본문
https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
요구사항
이름을 팰린드롬으로 만들기
풀이
반으로 나누어서 앞과 뒤가 똑같으면 팰린드롬이다
그러므로 조건이 만족할 경우 반으로 나눈 앞의 부분만 정렬한뒤 뒤에 똑같이 붙이면 된다
조건 1. 모든 숫자가 짝수 개
조건 2. 하나만 홀수개 나머지 짝수
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct go {
int len;
int sum;
string str;
};
int n;
go map[1010];
go buf[1010];
//대문자 A-65 +26 92 a-97
int visit[100];
int main() {
char ch[51];
vector<char> v;
cin >> ch;
int flag = 0;
int oddflag = 0;
int oddnum = 0;
for (int i = 0; ch[i] != 0; i++) {
visit[(int)ch[i]]++;
}
for (int i = 65; i < 100; i++) {
if (visit[i] == 0) continue;
if (visit[i] % 2 == 1) {
flag = 1;
oddflag++;
oddnum = i;
continue;
}
if (visit[i] % 2 == 0) {
int now = visit[i] / 2;
for (int j = 0; j < now; j++)
{
// cout << "D" << endl;
v.push_back(i);
}
}
}
if (flag == 0)
{
sort(v.begin(), v.end());
vector<char> ans;
for (int i = 0; i < v.size(); i++) {
ans.push_back(v.at(i));
}
for (int i = v.size() - 1; i >= 0; i--) {
ans.push_back(v.at(i));
}
for (int i = 0; i < ans.size(); i++) {
cout << ans.at(i);
}
}
else if (flag == 1 && oddflag>1) {
cout << "I'm Sorry Hansoo" << endl;
}
else if (flag == 1 && oddflag == 1) {
// cout << "A" << endl;
int now = visit[oddnum];
for (int j = 0; j < now/2; j++)
{
// cout << "B" << endl;
v.push_back(oddnum);
}
sort(v.begin(), v.end());
vector<char> ans;
for (int i = 0; i < v.size(); i++) {
ans.push_back(v.at(i));
}
ans.push_back(oddnum);
for (int i = v.size() - 1; i >= 0; i--) {
ans.push_back(v.at(i));
}
for (int i = 0; i < ans.size(); i++) {
cout << ans.at(i);
}
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 2512] 예산 (0) | 2020.02.19 |
---|---|
[백준 2211] 네트워크 복구 (0) | 2020.02.15 |
[백준 1431] 시리얼 번호 (0) | 2020.02.15 |
[백준 1936] 소수 경로 (0) | 2020.02.13 |
[백준 16234] 인구 이동 (0) | 2020.02.08 |
Comments