본문 바로가기

Algorithm/SWEA

[SWEA 10912] 외로운 문자

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