1. 문제 링크
https://www.acmicpc.net/problem/11328
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 |