https://www.acmicpc.net/problem/11328
11328번: Strfry
C 언어 프로그래밍에서 문자열(string)은 native한 자료형이 아니다. 사실, 문자열은 그저, 문자열의 끝을 표시하기 위한 말단의 NULL이 사용된, 문자들로 이루어진 문자열일 뿐이다. 하지만 프로그래
www.acmicpc.net
첫 번쨰 문자열을 strfry를 이용해 두 번째 문자열로 만들기 위해선, 두 문자열에 나온 각 문자의 개수가 모두 같아야 한다. 따라서 두 문자열에서 각 문자가 나온 횟수의 차를 구한 뒤, 어떤 문자에서 차가 0이 아닌 경우는 Impossible을, 그렇지 않다면 Possible를 출력한다.
#include <iostream>
using namespace std;
#define LEN 1000
void count(int cnt[], int add) {
// 문자열을 입력받을 공간
char str[LEN + 1];
// 문자열을 입력받은 뒤
cin >> str;
// 각 문자가 나온 만큼 str에 add를 더한다
for (int i = 0; str[i]; i++) cnt[str[i] - 'a'] += add;
}
bool test_case() {
// cnt[i]: 두 문자열에서 알파벳 i + 'a'가 나온 횟수의 차
int cnt[26] = { 0, };
// 첫 번째 문자열에 나온 각 문자의 개수를 세어 cnt에 더한 뒤
count(cnt, 1);
// 두 번째 문자열에 나온 각 문자의 개수를 세어 cnt에 빼 각 개수의 차를 계산
count(cnt, -1);
// 각 문자가 나온 횟수의 차가 0이 아닌 경우 false를 반환
for (int i = 0; i < 26; i++) if (cnt[i]) return false;
// 그렇지 않은 경우 두 번째 문자열을 strfry를 이용해 얻을 수 있으므로 true를 반환
return true;
}
int main() {
// 입출력 속도 향상
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
// 테스트 케이스의 수를 입력받고 각 테스트 케이스를 실행
for (cin >> N, cin.get(); N--; )
cout << (test_case() ? "Possible" : "Impossible") << '\n';
return 0;
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
11399번: ATM (0) | 2022.01.05 |
---|---|
11365번: !밀비 급일 (0) | 2022.01.05 |
11286번: 절댓값 힙 (0) | 2022.01.05 |
11279번: 최대 힙 (0) | 2022.01.05 |
11066번: 파일 합치기 (0) | 2022.01.04 |