일단 이 문제를 처음 봤을때, 단순 무식하게 반복문 돌리면 되는거 아니야? 생각하고 첫번째 문자열의 첫번째 문자부터 다 비교하려고 했다. 뭐 그렇게 해도되겟지만,, 문자열 길이가 n이라고 치면 시간이 n^2이 되기 때문에 비효율이라고 생각은 했다.

로컬에선 돌아갔는데 문제에서는 틀렸다고 나왔다 그래서 다른 사람 소스코드를 참고했다;;;;

혹시나 소스코드 보고 피드백있으면 편하게 댓글 달아주면 감사하겠다.

#include<iostream>
#include<string>

using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	int N; // 몇번 시행할지
	bool T; // 참 거짓을 판별하기 위한 변수
	string str1, str2; // 입력받을 문자열
	int src[26], des[26]; // 입력받은 문자열들의 알파벳 갯수 세기위한 배열들
	cin >> N;
	while (N--) {
		T = true; // 변수 초기화
		
		for (int i = 0; i < 26; i++) {
			src[i] = 0;
			des[i] = 0;
		} //변수 초기화
		
		cin >> str1 >> str2;
		
		if (str1.length() != str2.length()) { // 두 문자열의 길이가 다를경우 실패
			T = false;
		}
		else {
			for (int i = 0; i < str1.length(); i++) {
				src[str1[i] - 'a']++;
				des[str2[i] - 'a']++;
			} // 문자열의 해당 알파벳에 해당하는 인덱스를 올려준다.

			for (int i = 0; i < 26; i++) {
				if (src[i] != des[i]) {
					T = false;
					break;
				}
			} // 반복문을 돌면서 하나라도 같지 않으면 실패
		}
		
		if (T) {
			cout << "Possible" << endl;
		}
		else {
			cout << "Impossible" << endl;
		}		
	}
}

+ Recent posts