• 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";
  }
}