1. 문제 링크

 

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

 

11328번: Strfry

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

www.acmicpc.net

 

 

 

2. 문제 설명

string을 2개씩 입력받은 후 서로 재배열할 수 있는지 여부를 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 11328번 Strfry C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	int arr[26];
	bool is_possible;
	string s1, s2;
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> s1 >> s2;
		is_possible = true;
		fill(arr, arr + 26, 0);
		for (int j = 0; j < s1.length(); j++) {
			arr[s1[j] - 'a']++;
			arr[s2[j] - 'a']--;
		}
		for (int j = 0; j < 26; j++) {
			if (arr[j] != 0) {
				is_possible = false;
				break;
			}
		}
		if (is_possible) cout << "Possible\n";
		else cout << "Impossible\n";
	}

	return 0;
}

알파벳의 개수를 세기 위하여 10번 라인에서 arr[26]을 선언했습니다.

for문을 돌 때 마다 arr을 0으로 초기화하기 위해 18번 라인에서 fill함수를 사용했습니다.

문자열의 길이만큼 for문을 돌면서 s1에 있는 알파벳들의 인덱스에는 +1을 해주고

s2에 있는 알파벳들의 인덱스에는 -1을 해줬습니다.

결과적으로 arr의 요소가 0이 아니면 재배열해서 만들 수 없는 문자열이므로 이를 is_possible 변수를 이용해서 판단했습니다. 

'Algorithm > Study' 카테고리의 다른 글

[백준 1475번 C++] 방 번호  (0) 2020.05.13
[백준 13300번 C++] 방 배정  (0) 2020.05.13
[백준 1406번 C++] 에디터  (0) 2020.05.13
[백준 10807번 C++] 개수 세기  (0) 2020.05.12
[백준 10808번 C++] 알파벳 개수  (0) 2020.05.12

+ Recent posts