[백준/BOJ] 백준 11328번 : Strfry

2020. 8. 8. 01:48알고리즘 문제풀이

https://www.acmicpc.net/problem/11328

 

11328번: Strfry

문제 C 언어 프로그래밍에서 문자열(string)은 native한 자료형이 아니다. 사실, 문자열은 그저, 문자열의 끝을 표시하기 위한 말단의 NULL이 사용된, 문자들로 이루어진 문자열일 뿐이다. 하지만 프��

www.acmicpc.net

두 문자열에 등장하는 알파벳의 개수를 세서 만약 어떤 알파벳의 개수가 다르다면 어떤 문자열의 문자들을 재배열하여도 다른 문자열로 만들 수 없다. 또한 두 문자열의 길이가 다르면 알파벳 개수를 셀 필요 없이 무조건 불가능이다.

 

코드

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	int n;
	string input1, input2;
	int input1_cnt[26];
	int input2_cnt[26];

	cin >> n;

	for (int t = 0; t < n; t++)
	{
		memset(input1_cnt, 0, sizeof(input1_cnt));
		memset(input2_cnt, 0, sizeof(input2_cnt));

		cin >> input1 >> input2;

		//두 문자열의 개수가 다르면 어떤 문자열의 문자들을 재배열 하여도 다른 문자열로 만들 수 없다
		if (input1.size() != input2.size())
		{
			cout << "Impossible" << "\n";
			continue;
		}

		//각 문자열에 등장한 알파벳의 개수를 센다
		for (int i = 0; i < input1.size(); i++)
		{
			input1_cnt[input1[i] - 'a']++;
		}
		for (int i = 0; i < input2.size(); i++)
		{
			input2_cnt[input2[i] - 'a']++;
		}

		//어떠한 알파벳의 개수가 다르다면
		//어떤 문자열의 문자들을 재배열 하여도 다른 문자열로 만들 수 없다
		for (int i = 0; i < 26; i++)
		{
			if (input1_cnt[i] != input2_cnt[i])
			{
				cout << "Impossible" << "\n";
				break;
			}

			//알파벳의 개수가 다른것이 없을때
			if (i == 25)
			{
				cout << "Possible" << "\n";
			}
		}

	}

	return 0;
}