- toc {:toc}
๋ฌธ์
C ์ธ์ด ํ๋ก๊ทธ๋๋ฐ์์ ๋ฌธ์์ด (string) ์ native ํ ์๋ฃํ์ด ์๋๋ค. ์ฌ์ค, ๋ฌธ์์ด์ ๊ทธ์ , ๋ฌธ์์ด์ ๋์ ํ์ํ๊ธฐ ์ํ ๋ง๋จ์ NULL ์ด ์ฌ์ฉ๋, ๋ฌธ์๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ผ ๋ฟ์ด๋ค. ํ์ง๋ง ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์, C ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ๋ฐ์ ๋งค์ฐ ์ ์ฉํ ํจ์๋ค์ ์ ๊ณตํ๊ณ ์๋ค : ๊ทธ๋ค ์ค์๋ย strcpy,ย strcmp,ย strtol,ย strtok,ย strlen,ย strcatย ๊ฐ ์๋ค.
ํ์ง๋ง, ์ ์๋ ค์ ธ ์์ง ์์ผ๋ฉฐ, ์ ์ฌ์ฉ๋์ง๋ ์๋ ํจ์๊ฐ ํ๋ ์๋ค :ย strfryย ํจ์๋ค.ย strfryย ํจ์๋ ์ ๋ ฅ๋ ๋ฌธ์์ด์ ๋ฌด์์๋ก ์ฌ๋ฐฐ์ดํ์ฌ ์๋ก์ด ๋ฌธ์์ด์ ๋ง๋ค์ด๋ธ๋ค. (์ญ์ ์ฃผ : ์ฌ๊ธฐ์์ ์ ๋ ฅ๋ ๋ฌธ์์ด๊ณผ ์๋ก ์ฌ๋ฐฐ์ด๋ ๋ฌธ์์ด์ด ๋ค๋ฅผ ํ์๋ ์๋ค.)
๋ ๊ฐ์ ๋ฌธ์์ด์ ๋ํด, 2 ๋ฒ์งธ ๋ฌธ์์ด์ด 1 ๋ฒ์งธ ๋ฌธ์์ด์ย strfryย ํจ์๋ฅผ ์ ์ฉํ์ฌ ์ป์ด์ง ์ ์๋์ง ํ๋จํ๋ผ.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ๋ฒ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ์ย 0 <ย Nย < 1001 ์ด๋ค.
๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ ํ๋์ ์ค์ ์์ด ์๋ฌธ์๋ค๋ก๋ง ์ด๋ฃจ์ด์ง ๋ ๊ฐ์ ๋ฌธ์์ด์ด ํ ๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ ์ต๋ 1000 ์ด๋ค.
์ถ๋ ฅ
๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค์ ๋ํด,ย 2 ๋ฒ์งธ ๋ฌธ์์ด์ด 1 ๋ฒ์งธ ๋ฌธ์์ด์ย strfryย ํจ์๋ฅผ ์ ์ฉํ์ฌ ์ป์ด์ง ์ ์๋์ง์ ์ฌ๋ถ๋ฅผ โImpossibleโ(๋ถ๊ฐ๋ฅ) ๋๋ โPossibleโ(๊ฐ๋ฅ) ์ผ๋ก ๋ํ๋ด์์ค. (๋ฐ์ดํ๋ ์ ์ธํ๊ณ ์ถ๋ ฅํ๋ค.)
์ถ์ฒ:https://www.acmicpc.net/problem/11328
ํ์ด
range-based for ๋ฌธ์ ํตํด ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ๋ฐ์๋ด ๋ฐฐ์ด์ ์ ์ฅ.
changed(๋ฌด์์๋ก ๋ณ๊ฒฝ๋ ๋ฌธ์์ด) ๋ for ๋ฌธ์ผ๋ก ๋ฐ์๋ด ๋ฐฐ์ด์ ์๋์ง ์๋์ง ํ์ธ.
โ ์ํ๋ฒณ ๊ฐ์์ ๋ฐ๋ผ ๋ถ๊ฐ๋ฅํ ๊ฒ๋ ์๊ธฐ์ ๋ฐฐ์ด์ ์ถ๊ฐ ๋นผ๊ธฐ ๋ฐฉ์์ผ๋ก ์ ์ฉํ๋ค.
์ด๋๊น์ง์ ์ฝ๋๋ changed ๊ฐ ๋ถํ์ํ ์ํ๋ฒณ๊น์ง ์ฌ์ฉํ ๊ฒฝ์ฐ์ด๋ค.
๋๋ฌธ์ changed ๊ฐ ํ์ํ ์ํ๋ฒณ์ ์ผ๋ถ๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํด์ค๋ค.
์ถ๊ฐ๋ก, arr ๋ฐฐ์ด ์ด๊ธฐํ๊น์ง ์งํํ๋ค.
!!! ํ์ดํ ๋ ์กฐ๊ฑด, ๊ฒฝ์ฐ์ ์๋ฅผ ๋จผ์ ์๊ฐํ๊ณ ์ ์ง๋ฅด์ !!!
#include <bits/stdc++.h>
using namespace std;
int arr[30];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int N, res=1;
string origin, changed;
cin >> N;
for(int i=0; i<N; ++i){
res = 1;
cin >> origin >> changed;
// ์ํ๋ฒณ ์์๋ก ์นด์ดํ
=> ์ํ๋ฒณ ๊ฐ์์ ๋ฐ๋ผ 1์ด ์๋ 2, 3, ... ๊ฐ๋ฅ
for(int elem : origin){
arr[elem-'a']++;
}
for(int elem : changed){
if(arr[elem-'a']==0){
res = 0;
}
// origin์ด ae์ธ๋ฐ changed๊ฐ aa์ธ ๊ฒฝ์ฐ ํ์ธํ๊ธฐ ์ด๋ ต๊ธฐ์ ๋นผ๊ฐ๋ฉด์ ์นด์ดํ
else{
arr[elem-'a']--;
}
}
// ํ์ํ ์ํ๋ฒณ ์ค ์ผ๋ถ๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฒ๋ฆฌ + ๋ฐฐ์ด ์ด๊ธฐํ
for(int i=0; i<30; i++){
if(arr[i]!=0){
res=0;
arr[i]=0;
}
}
if(res==1) cout << "Possible\n";
else cout << "Impossible\n";
}
return 0;
}์ ๋ต ํ์ด
๊ฒฐ๊ตญ ์ฌ๊ณ ๋ฐฉ์์ ๊ฐ์ง๋ง ๋ช ํํ ๋ฐฉ์ ์ค์ ์ผ๋ก ํจ์ฌ ๊ฐ๊ฒฐํด์ง ์ฝ๋.
์ด์ฐจํผ ๋ง์ง๋ง์ ํ์ธํ๊ธฐ์ ์ด์ ๊ณผ์ ์ ๋ชจ๋ ์๋ตํด๋ ๋๋ค.
// Authored by : OceanShape
// Co-authored by : BaaaaaaaaaaarkingDog
// http://boj.kr/a3d03c0124b544759d306668e55bbf4b
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
while (N--) {
int a[26] = {}; // ๊ฐ ๋ฌธ์์ ๊ฐ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด
string s1, s2;
cin >> s1 >> s2;
for (auto c : s1) a[c-'a']++; // ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ ๊ฐ์+1
for (auto c : s2) a[c-'a']--; // ๋ ๋ฒ์งธ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ ๊ฐ์-1
// 0์ด ์๋ ๋ฐฐ์ด์ ์์๊ฐ ์์ ๊ฒฝ์ฐ, ๊ฐ์๊ฐ ๋ค๋ฅธ ๋ฌธ์๊ฐ ์กด์ฌํ๋ฏ๋ก false
bool isPossible = true;
// ์ค๊ดํธ๊ฐ ์์ด๋ ๋ฌธ์ ๋ ์์ผ๋ ๊ฐ๋
์ฑ์ ์ํด ์ฝ์
for (int i : a){
if (i != 0) isPossible = false;
}
if(isPossible) cout << "Possible\n";
else cout << "Impossible\n";
}
}