문제
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
char result[52];
int a,b;
int next_two_same(char a,char b)
{
return (a == b);
}
int main()
{
string s;
cin >>s;
sort(s.begin(), s.end());
b = s.size() - 1;
int num = 1;
int flag =0;
int i =0;
while (i < s.size())
{
if (i + 1 >= s.size())
{
result[a] = s[i];
if (flag)
{
cout << "I'm Sorry Hansoo\n";
return (0);
}
}
if (next_two_same(s[i],s[i+1]))
{
result[a] = s[i];
result[b] = s[i];
a++;
b--;
i+= 2;
}
else
{
if (flag)
{
cout << "I'm Sorry Hansoo\n";
return (0);
}
result[s.size()/2] = s[i];
flag = 1;
i++;
}
}
cout << result;
}
문제 풀이의 흐름
- 펠린드롬은 앞뒤로 같은 대칭 구조를 이루기 때문에 큰 배열을 선언해두고 앞 뒤로 붙혀가면서 사용하고자 생각을 했다.
- 따라서 문자를 쭉 받아서 그 문자를 순서대로 정렬을 먼저 해줬다
- 이 후 펠렌드롬 문자열을 받을 배열인 result에 string을 쭉 돌면서 값을 넣어줄 것이다.
- 현재 문자열에서 뒤의 두개의 문자가 같으면 result배열에 앞과 뒤에 넣어줬다.
- 만약 문자열의 크기가 넘어가는 경우 즉 문자가 1개인 경우나 AAB이렇게 되는 경우에는 while 루프 첫번째 조건문에 걸리게 된다.
- 우리는 홀수인 경우는 오로지 한번만 발생해야하니까 flag를 줘서 만약 홀수갯수인 문자가 나오면 가운데에 넣어주고 또 다시 한번 홀수인 문자가 나오면 즉시 종료 하면서 에러 메세지를 띄운다.
주의 할 점
꽤나 빡구현이었다. 자꾸 헷갈리고 조금 더 간단하게 생각을 정리하고 했어야하는데 자꾸 부딪치면서 코드가 엄청 길어졌었다. 먼저 아이디어를 컴퓨터가 생각하는 것 처럼 간단하게 정리를 하고 코드를 짜는걸 추천한다.
문자열을 잘못 넣지 않게 주의하자!
반성 및 고찰
안풀려서 버린 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
char result[52];
int main()
{
string s;
cin >>s;
sort(s.begin(), s.end());
char bef = 0;
int cnt = 0;
int front= 0;
int last = s.size() - 1;
int flag =0;
int i = 1;
// cout << s;
for (auto it : s)
{
if (i == s.size() -1 || (cnt != 0 && bef != it))
{
if (flag == 1 && cnt % 2 != 0)
{
cout << "I'm Sorry Hansoo";
return (0);
}
else
{
while (cnt >0)
{
if (cnt == 1)
{
result[s.size()/2] = bef;
flag = 1;
cnt = 0;
}
else
{
result[front] = bef;
front++;
result[last] = bef;
last--;
cnt -=2;
}
}
}
}
cnt++;
bef = it;
i++;
}
for (int i=0; i < 4; i++) cout << result[i];
cout << result;
}
너무 많은 변수를 쓰고 자꾸 기워가면서 코드를 짜다보니 아에 지우고 다시 풀어버렸다. 꼭 생각정리를 잘 하고 풀자 사실상 빡구현에 가깝다.
Uploaded by N2T
728x90
'알고리즘 > 백준-실버' 카테고리의 다른 글
백준 3986번 좋은단어 (C++)(부제 맞왜틀..) (0) | 2023.01.02 |
---|---|
백준 1940번 주몽(C++) (0) | 2023.01.02 |
백준 9375번 패션왕 신해빈(C++) (0) | 2022.12.30 |
백준 1620번 나는야 포켓몬 마스터 이다솜(C++) (0) | 2022.12.30 |
백준 2559번 수열 (C++) (0) | 2022.12.30 |