๐Ÿ• Baaaaaarking/0x03๊ฐ• - ๋ฐฐ์—ด

[BOJ][C++] ๋ฐฑ์ค€ 113289๋ฒˆ: Strfry

์„ ๋‹ฌ 2023. 4. 28. 23:26
๋ฐ˜์‘ํ˜•

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

 

11328๋ฒˆ: Strfry

C ์–ธ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ฌธ์ž์—ด(string)์€ nativeํ•œ ์ž๋ฃŒํ˜•์ด ์•„๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๋ฌธ์ž์—ด์€ ๊ทธ์ €, ๋ฌธ์ž์—ด์˜ ๋์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋ง๋‹จ์˜ NULL์ด ์‚ฌ์šฉ๋œ, ๋ฌธ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ผ ๋ฟ์ด๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜

www.acmicpc.net

 

๋ฌธ์ œ

C ์–ธ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ฌธ์ž์—ด(string)์€ nativeํ•œ ์ž๋ฃŒํ˜•์ด ์•„๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๋ฌธ์ž์—ด์€ ๊ทธ์ €, ๋ฌธ์ž์—ด์˜ ๋์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋ง๋‹จ์˜ NULL์ด ์‚ฌ์šฉ๋œ, ๋ฌธ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ผ ๋ฟ์ด๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, C ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ๋ฐ์— ๋งค์šฐ ์œ ์šฉํ•œ ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค : ๊ทธ๋“ค ์ค‘์—๋Š” strcpystrcmpstrtolstrtokstrlen, strcat ๊ฐ€ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ์ž˜ ์‚ฌ์šฉ๋˜์ง€๋„ ์•Š๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์žˆ๋‹ค : strfry ํ•จ์ˆ˜๋‹ค. strfry ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ๋ฌด์ž‘์œ„๋กœ ์žฌ๋ฐฐ์—ดํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. (์—ญ์ž ์ฃผ : ์—ฌ๊ธฐ์—์„œ ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด๊ณผ ์ƒˆ๋กœ ์žฌ๋ฐฐ์—ด๋œ ๋ฌธ์ž์—ด์ด ๋‹ค๋ฅผ ํ•„์š”๋Š” ์—†๋‹ค.)

๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด, 2๋ฒˆ์งธ ๋ฌธ์ž์—ด์ด 1๋ฒˆ์งธ ๋ฌธ์ž์—ด์— strfry ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ์–ป์–ด์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋ผ.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ 0 < N < 1001 ์ด๋‹ค.

๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•˜๋‚˜์˜ ์ค„์— ์˜์–ด ์†Œ๋ฌธ์ž๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด์ด ํ•œ ๊ฐœ์˜ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 1000 ์ด๋‹ค.

์ถœ๋ ฅ

๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด, 2๋ฒˆ์งธ ๋ฌธ์ž์—ด์ด 1๋ฒˆ์งธ ๋ฌธ์ž์—ด์— strfry ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ์–ป์–ด์งˆ ์ˆ˜ ์žˆ๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ "Impossible"(๋ถˆ๊ฐ€๋Šฅ) ๋˜๋Š” "Possible"(๊ฐ€๋Šฅ)์œผ๋กœ ๋‚˜ํƒ€๋‚ด์‹œ์˜ค. (๋”ฐ์˜ดํ‘œ๋Š” ์ œ์™ธํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.)

 

ํ’€์ด

ํ‘œํ˜„๋งŒ ์‚ด์ง ๋‹ค๋ฅผ ๋ฟ์ด์ง€ ๊ฒฐ๊ตญ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ž๋“ค์˜ ์ข…๋ฅ˜์™€ ๊ฐฏ์ˆ˜๊ฐ€ ๊ฐ™์€์ง€๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ์ด๋‹ค

์•ŒํŒŒ๋ฒณ ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ ์•ŒํŒŒ๋ฒณ์˜ ์ˆ˜๋ฅผ ์„ธ์ฃผ๋ฉด ๋˜๋Š”๋ฐ,

์ด๋•Œ ๋ฒกํ„ฐ๋ฅผ ๋‘๊ฐœ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์•„์„œ s1 ๊ธ€์ž๋“ค์€ ++, s2 ๊ธ€์ž๋“ค์€ --๋ฅผ ํ•ด์คฌ๋‹ค.

์ดํ›„ ๋ชจ๋“  ๊ฐฏ์ˆ˜๊ฐ€ 0์ธ์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ ๋ฆฌํ„ดํ•ด์คฌ๋‹ค.

 

#include <iostream>
#include <vector>

using namespace std;

bool solution(string s1, string s2) {
    vector<int> cnt(26, 0);

    if(s1.size() != s2.size())
        return false;
        
    for(int i=0; i<s1.size(); i++) {
        cnt[s1[i]-'a']++;
        cnt[s2[i]-'a']--;
    }
    
    for(int i : cnt)
        if(i != 0) return false;
    return true;
}

int main() {
    
    int n;
    cin >> n;
    
    string s1, s2;
    while(n--) {
        cin >> s1 >> s2;
        if(solution(s1, s2))
            cout << "Possible\n";
        else
            cout << "Impossible\n";
    }
    
    return 0;
}

 

๋ฐ˜์‘ํ˜•