SWEA 10912번 : 외로운 문자
swexpertacademy.com/main/main.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
/* 문제 설명 */
주어진 문자열에서 같은 두 문자를 지워나갔을 때 남는 문자열을 출력하시오.만약 문자열에 있는 모든 문자들을 지울 수 있는 경우에는 Good을 출력하라.
/* 해결 방안 */
여기서 중요한 것은 같은 문자 서로 붙어있을 때 지우는 것이 아니라, 그냥 문자열 내에 있는 문자들 중 같은 거 두 개를 지우면 됩니다.이는 주어진 테스트 케이스 중 마지막 항목을 보시면 알 수 있습니다.
따라서, 계수 정렬을 이용하여 a-z까지 문자가 나온 횟수를 세어주었고각 알파벳에 대해서 for문을 돌면서 나머지 연산(%2)을 했을 때, 1이면 남은 문자열이라는 뜻이므로 ans에 추가해줍니다.
/* 구현 과정 */
1. 입력 받은 str에 대해 for문을 돌면서 각 알파벳 별로 나온 횟수를 세어준다.
2. 0-26까지 for문을 돌면서, 각 알파벳 별로 몇 번 나왔는지를 구하고 이에 대해 %2를 해준다.
3. 만약 0이라면 지워졌거나 원래부터 없는 문자라는 뜻이고, 1이라면 지워줬음에도 남은 문자라는 뜻이다.
4. ans에 결과를 담고, ans가 비어있을 경우에는 Good을 출력하고, 그 외에는 ans를 출력한다.
/* 소스 코드 */
#include<iostream>
#include<string>
using namespace std;
int main(int argc, char** argv)
{
int test_case;
int T;
cin>>T;
for(test_case = 1; test_case <= T; ++test_case)
{
string str; cin >> str;
int cnt[27] = {0,};
for(int i = 0; i<str.size(); i++){
cnt[str[i] - 97]++;
}
string ans ="";
for(int i = 0; i<26; i++){
if(cnt[i]%2 != 0) ans+= (i+97);
}
if(ans.empty()) ans="Good";
cout << "#" << test_case << " " << ans << "\n";
}
return 0;
}
/* 신기한 점 */
1. SWEA에서는 처음 문제를 풀어보는데 신기했다.
2. stack 메모리 제한이 1MB구나 조심해야겠다.
3. 뭘 풀어야할지 몰라서 D3을 선택했는데 조금 더 올려야겠다.
4. 백준에서만 풀어서 아직 여기 사이트는 익숙하진 않지만 여기서도 꾸준히 문제를 풀어야겠다.
개인적인 체감 : 백준 >>>>>>>>>>> 구름 >= SWEA >>>>>>>>>>>>>>넘사>>>>>>>>>>>> 프로그래머스
SWEA는 문제 따로 편집기 따로여서 공간이 많으니 편안했다.구름은 스코페 때 처음 써봤는데 편집기, 문제 따로 크기 설정을 할 수 있어서 정말 감동이었다.하지만, 프로그래머스는... 글자를 크게 해놓는 편인데, 프로그래머스에서는 확대하면 문제랑 편집기 크기까지 같이 커져서 진짜 너무 불편했다.
진심 2줄씩 보면서 문제를 푼 적이 있다.
프로그래머스에서 문제 풀려면 모니터를 사야겠더라..
5. 일부러 SWEA에 있는 편집기에서 코딩했는데, 실제로 코테에서도 같은 환경인지 궁금하다.
'Algorithm > SWEA' 카테고리의 다른 글
[SWEA 1257] K번째 문자열 (0) | 2021.04.19 |
---|---|
[SWEA 2383] 점심 식사시간 (0) | 2021.04.16 |