본문 바로가기

백준

13019 A를 B로

- 순서가 올바르지 않으면 무조건 옮겨야 한다

- 어떤 것들을 옮길지가 중요하지 어떤 순서로 옮겨야 하는지는 중요하지 않다

- 그래서 뒤에서부터 올바르지 않은 알파벳들의 개수를 세어주었다

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>
#include<cassert>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 987654321

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

int alphabet1[100];
int alphabet2[100];

void countAlphabet(char c, int *alphabet) {
    assert(c >= 65);
    assert(c <= 90);
    
    alphabet[c]++;
}

int main() {
    string a, b;
    cin >> b;
    cin >> a;
    
    // 알파벳 개수가 같은지 검증
    if (a.size() != b.size()) {
        printf("-1\n");
        return 0;
    }
    
    for (int i = 0; i < a.size(); i++) {
        countAlphabet(a[i], alphabet1);
    }
    
    for (int i = 0; i < b.size(); i++) {
        countAlphabet(b[i], alphabet2);
    }
    
    for (int i = 0; i < 100; i++) {
        if (alphabet1[i] != alphabet2[i]) {
            printf("-1\n");
            return 0;
        }
    }
    
    // 로직 시작
    int ans = 0;
    for (int i = a.size() - 1, j = b.size() - 1; i >= 0 && j >= 0; j--) {
        if (a[i] == b[j]) {
            i--;
            continue;
        }
        ans++;
    }
    
    printf("%d", ans);
    
    return 0;
}

 

 

 

 

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

23083 꿀벌 승연이  (0) 2023.01.14
1242 소풍  (0) 2023.01.14
12915 대회 개최  (0) 2022.12.17
6503번 망가진 키보드 푸는 중  (0) 2022.11.26
14217 그래프 탐색  (0) 2022.09.24