문제 링크
https://www.acmicpc.net/problem/11328
문제 정보
입력
입력의 첫 번째 줄은 테스트 케이스의 수 0 < N < 1001 이다.
각각의 테스트 케이스는 하나의 줄에 영어 소문자들로만 이루어진 두 개의 문자열이 한 개의 공백으로 구분되어 주어진다. 각각의 문자열의 길이는 최대 1000 이다.
출력
각각의 테스트 케이스에 대해, 2번째 문자열이 1번째 문자열에 strfry 함수를 적용하여 얻어질 수 있는지의 여부를 "Impossible"(불가능) 또는 "Possible"(가능)으로 나타내시오. (따옴표는 제외하고 출력한다.)
풀이
하나의 문자열은 알파벳 개수를 더해주고, 다른 문자열은 알파벳 개수를 빼주는 방식으로 알파벳 배열에 0이 아닌 다른 값이 있을 경우에는 두 문자열이 같지 않다는 것을 알 수 있다!
소스 코드
#include <bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
string s1, s2;
int alphabet[26];
bool isPossible;
while (N--) {
cin >> s1 >> s2;
fill(alphabet, alphabet + 26, 0); // alphabet 배열 0으로 초기화!
isPossible = true;
for (int i = 0; i < s1.length(); i++) {
alphabet[s1[i] - 'a']++;
alphabet[s2[i] - 'a']--;
}
for (int i = 0; i < 26; i++) {
if (alphabet[i] != 0) {
isPossible = false;
break;
}
}
if (isPossible) {
cout << "Possible\n";
} else {
cout << "Impossible\n";
}
}
return 0;
}