[백준] 1919 애너그램 만들기

김보현·2021년 12월 25일
0

코딩테스트

목록 보기
1/26

애너그램 만들기

백준1919링크

입력

첫째 줄과 둘째 줄에 영어 단어가 소문자로 주어진다. 각각의 길이는 1,000자를 넘지 않으며, 적어도 한 글자로 이루어진 단어가 주어진다.

출력

애너그램을 만들기 위해 제거해야하는 최소 개수의 문자 수

내가 푼 풀이방법

두 문자열을 이중반복문을 통해 비교하면서 문자가 두 문자열에 모두 있는 경우와 모두 없는 경우를 구하기
제거해야하는 문자 수 = A에서 제거해야하는 문자 수(B에 없는 문자 수) + B에서 제거해야하는 문자 수(전체 문자수-모두 있는 경우)

#include <iostream>
#include<string>
#include<vector>
using namespace std;

int main() {
    string a,b;
    
    cin>>a;
    cin>>b;
    
    vector<int> b_check(b.size());
    
    int noA=0; //a에 있는게 b에 없는 경우
    int inB=0; //a에 있는게 b에도 있는 경우
    
    for(int i=0;i<a.size();i++){
        int a_check=0;
        for(int j=0;j<b.size();j++){
            if(b_check[j]==0 &&a[i]==b[j]){
                b_check[j]=1;
                inB++;
                a_check=1;
                break;
            }
        }
        if(a_check==0){
            noA++;
        }
    }
    
    cout<<noA+(b.size()-inB)<<endl; //a와b 모두 없는 경우(a에 없는 경우) + (b의 길이-모두 있는 경우 == b에 없는 경우 세기)
    return 0;
}
  • 내가 푼 풀이로 통과는 했지만 괜찮은 풀이인지는 잘 모르겠다..!

다른 풀이방법

int strA[26]={0,}
int strB[26]={0,}
-> 각 알파벳 인덱스에 해당하는 배열의 값 증가
-> (strA[i]-strB[i])의 절대값 = 제거해야하는 문자 수

profile
📈어제보다 조금 더 성장하는 오늘을 위해

0개의 댓글