πŸ“¦ Chango/🍣 EDOC

[BOJ][C++] 9946번: 단어 퍼즐

선달 2021. 11. 2. 20:03
λ°˜μ‘ν˜•

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

 

9946번: 단어 퍼즐

μΌ€μ΄μŠ€λ§ˆλ‹€ 번호λ₯Ό λΆ™μ—¬μ„œ 예제좜λ ₯κ³Ό 같은 ν˜•μ‹μœΌλ‘œ 좜λ ₯ν•œλ‹€. μ€€ν•˜κ°€ μ•ŒνŒŒλ²³μ„ μ œλŒ€λ‘œ νšŒμˆ˜ν–ˆλ‹€λ©΄ same 을, 잘λͺ» νšŒμˆ˜ν–ˆλ‹€λ©΄ different λ₯Ό 좜λ ₯ν•œλ‹€.

www.acmicpc.net

 

문제

μ€€ν•˜λŠ” μœ μΉ˜μ›μ—μ„œ 단어 νΌμ¦κ²Œμž„μ„ μ¦κ²¨ν•œλ‹€.

단어 νΌμ¦κ²Œμž„μ΄λž€, 주어진 μ•ŒνŒŒλ²³λ“€μ„ μ„žμ–΄μ„œ 단어λ₯Ό λ§Œλ“œλŠ” κ²Œμž„μ΄λ‹€.

천재 μ€€ν•˜λŠ” μ•ŒνŒŒλ²³μ„ μž„μ˜λ‘œ μ‘°ν•©ν•˜μ—¬, 사전과 맀칭된 단어λ₯Ό λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄ 단어λ₯Ό μ™„μ„±μ‹œμΌ°λ‹€.

κ·ΈλŸ¬λ‚˜ μ™„μ„±λœ 단어λ₯Ό 원μž₯λ‹˜μ—κ²Œ κ°€μ Έκ°€λ €λŠ” μˆœκ°„, μ§€λ‚˜κ°€λ˜ 강민이와 λΆ€λ”«ν˜€μ„œ 단어쑰각을 땅에 λ–¨μ–΄λœ¨λ¦¬κ³  λ§μ•˜λ‹€.

μ€€ν•˜λŠ” μ–΄μ°Œμ–΄μ°Œ 쑰각을 νšŒμˆ˜ν–ˆμ§€λ§Œ, μˆœμ„œλŠ” 뒀죽박죽이 λ˜μ—ˆκ³ , μ•ŒνŒŒλ²³μ΄ λΆ€μ‘±ν•˜κ±°λ‚˜ λ‹€λ₯Έ μ•ŒνŒŒλ²³μ΄ μ„žμ˜€μ„ μˆ˜λ„ μžˆλ‹€.

μ€€ν•˜κ°€ μ²˜μŒμ— μ™„μ„±ν•œ 단어와 λ‚˜μ€‘μ— νšŒμˆ˜ν•œ μ•ŒνŒŒλ²³λ“€μ΄ μ£Όμ–΄μ§ˆ λ•Œ,

μ€€ν•˜κ°€ μ•ŒνŒŒλ²³μ„ μ œλŒ€λ‘œ νšŒμˆ˜ν–ˆλŠ”μ§€ μ•ˆν–ˆλŠ”μ§€ νŒλ‹¨ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄μ£Όμž.

μž…λ ₯

μž…λ ₯은 μΌ€μ΄μŠ€λ§ˆλ‹€ λ‘μ€„λ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.

첫째 쀄은 μ€€ν•˜κ°€ 처음 μ™„μ„±ν•œ 단어이고, λ‘˜μ§Έ μ€„은 λ–¨μ–΄λœ¨λ¦° λ‹€μŒ νšŒμˆ˜ν•œ μ•ŒνŒŒλ²³λ“€μ΄λ‹€. 

각 쀄은 μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œ 이루어져 있고, κΈΈμ΄λŠ” 1000을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

λ§ˆμ§€λ§‰μ— ENDλΌλŠ” 단어가 두쀄 μ£Όμ–΄μ§€λŠ”λ°, μ΄λŠ” μΌ€μ΄μŠ€μ˜ 끝을 μ˜λ―Έν•œλ‹€.

좜λ ₯

μΌ€μ΄μŠ€λ§ˆλ‹€ 번호λ₯Ό λΆ™μ—¬μ„œ 예제좜λ ₯κ³Ό 같은 ν˜•μ‹μœΌλ‘œ 좜λ ₯ν•œλ‹€.

μ€€ν•˜κ°€ μ•ŒνŒŒλ²³μ„ μ œλŒ€λ‘œ νšŒμˆ˜ν–ˆλ‹€λ©΄ same 을, 잘λͺ» νšŒμˆ˜ν–ˆλ‹€λ©΄ different λ₯Ό 좜λ ₯ν•œλ‹€.

 

풀이

#include <iostream>
#include <algorithm>
#include <string.h>

using namespace std;

int main () {
    
    for(int j=1; ;j++){
        
        //μ΄ˆκΈ°ν™”
        bool same = true;
        string a, b;
        int A[26] = {0}, B[26] = {0};
        
        //μž…λ ₯
        cin >> a >> b;
        
        //μ’…λ£Œ
        if(a == "END")
            break;
        
        //μ•ŒνŒŒλ²³ λ°°μ—΄ μ €μž₯
        for(int i=0; i<a.length(); i++)
            A[a[i] -'a']++;
        
        for(int i=0; i<b.length(); i++)
            B[b[i] -'a']++;
        
        //비ꡐ
        for(int i=0; i<26; i++){
            if(A[i] != B[i]){
                same = false;
                break;
            }
        }
        
        //좜λ ₯
        if(same)
            cout << "Case " << j << ": same\n";
        else
            cout << "Case " << j << ": different\n";
    
    }
    
    return 0;
}
λ°˜μ‘ν˜•