알고리즘 모음(C++)

백준 1919 - 애너그램 만들기(C++) 본문

백준

백준 1919 - 애너그램 만들기(C++)

공대생의 잡다한 사전 2023. 6. 9. 23:41

문제 링크입니다. https://www.acmicpc.net/problem/1919

 

1919번: 애너그램 만들기

두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs

www.acmicpc.net

두 문자열에서 최소한의 문자를 없애 애너그램으로 만드는 문제입니다.

 

문자를 지우는 경우는 2가지 입니다.

1. 알파벳이 둘 다 있지만 개수가 다른경우

2. 한 문자열에만 알파벳이 있는 경우

 

1번째 경우에는 알파벳 개수의 차이만큼만 없애주면 되고, 2번째 경우에는 없는 모든 알파벳을 없애줘야합니다.

 

 

자세한 것은 코드를 참고해주세요

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
#include <string>

using namespace std;

string x, y;
int alpha1[26], alpha2[26];
int check1[26], check2[26];
int ans;

int main(){
    cin.tie(0);
    cout.tie(0);
    cin >> x >> y;
    for(int i = 0; i < x.size(); i++){
        check1[x[i] - 'a'] = 1;
        alpha1[x[i] - 'a']++;
    }
    for(int i = 0; i < y.size(); i++){
        check2[y[i] - 'a'] = 1;
        alpha2[y[i] - 'a']++;
    }
    for(int i = 0; i < 26; i++){
        if(check1[i] && check2[i]){
            if(alpha1[i] != alpha2[i]) ans += abs(alpha1[i] - alpha2[i]);
        }
        else{
            ans += (alpha1[i] + alpha2[i]);
        }
    }
    cout << ans;
    return 0;
}

 

질문 및 조언은 댓글을 남겨주세요

'백준' 카테고리의 다른 글

백준 1213 - 펠린드롬 만들기(C++)  (0) 2023.06.11
백준 2935 - 소음(C++)  (0) 2023.06.09
백준 5218 - 알파벳 거리(C++)  (2) 2023.06.09
백준 1652 - 누울 자리를 찾아라(C++)  (0) 2023.06.04
백준 1225 - 이상한 곱셈(C++)  (0) 2023.06.03