본문 바로가기

백준/C++

[BaeKJoon/C++] 백준 9946 c++ 단어 퍼즐

반응형

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

 

 

9946번: 단어 퍼즐

케이스마다 번호를 붙여서 예제출력과 같은 형식으로 출력한다. 준하가 알파벳을 제대로 회수했다면 same 을, 잘못 회수했다면 different 를 출력한다.

www.acmicpc.net

문제

두개의 문자열을 입력하여 같은 문자들로 이루어지면 same, 아니면 different를 출력하는 문제

예제 입력 1 복사

testing
intestg
abc
aabbbcccc
abcabcbcc
aabbbcccc
abc
xyz
END
END

예제 출력 1 복사

Case 1: same
Case 2: different
Case 3: same
Case 4: different

코드

#include <iostream>
#include <string>
#include <vector>    // vector
#include <algorithm> // sort
 
using namespace std;
 
int main() {
 
    string str,str1;
    // Case k:
    int k=1;
 
    while(true){
        // str, str1 두개의 문자열이 다 END이면 끝나는 코드
        cin>>str>>str1;
        if(str=="END"&&str1=="END"){
            break;
        }
 
        vector<char> vec;
        vector<char> v;
 
        for(int i=0; i<str.length(); i++){
            char c = str[i];
            vec.push_back(c);
        }
 
        for(int j=0; j<str1.length(); j++){
            char ch = str1[j];
            v.push_back(ch);
        }
 
        // str = aabbbcccc
        // str1 = abcabcbcc
 
        // 입력받은 두개의 문자열을 알파벳순(오름차순)으로 정렬한다.
        sort(vec.begin(), vec.end());
        sort(v.begin(), v.end());
 
        // sort -> str = aabbbcccc
        // sort -> str1 = aabbbcccc
 
        int cnt=0;
 
        // 두개의 문자열의 길이가 서로 다르면 애초에 다른 문자열이기 때문에 
        if(vec.size()!=v.size()){
            cout<<"Case "<<k<<": different\n";
        }
        else{
            for(int i=0; i<vec.size(); i++){
                if(vec[i]==v[i]){
                    cnt++;
                }
            }
            if(cnt==vec.size()){
                cout<<"Case "<<k<<": same\n";
            }
            else{
                cout<<"Case "<<k<<": different\n";
            }
        }
        // Case k++
        k++;
    }
    return 0;
}
cs

정리

사실 이 문제는 두개의 문자열을 sort(오름차순)를 해서 각 문자가 맞는지 맞지 않는지만 판단하면 된다.

 

반응형