상세 컨텐츠

본문 제목

[HackerRank] Strings: Making Anagrams (String Manipulation) (C++)

PROGRAMMING/Algorithm

by koharin 2021. 1. 17. 18:40

본문

728x90
반응형
#include <bits/stdc++.h>

using namespace std;

// Complete the makeAnagram function below.
int makeAnagram(string a, string b) {
    vector<int> count(26, 0);
    int c=0;
    for(auto i: a) ++count[i-'a'];
    for(auto i: b) --count[i-'a'];
    for(auto i: count) c += abs(i);
    return c;

}

int main()
{
    ofstream fout(getenv("OUTPUT_PATH"));

    string a;
    getline(cin, a);

    string b;
    getline(cin, b);

    int res = makeAnagram(a, b);

    fout << res << "\n";

    fout.close();

    return 0;
}
  • i-'a'에서 'a'는 아스키코드로 97이고, i도 a~z의 소문자 26개 중 아스키코드 값을 가지므로 'a'이면 0, 'b'이면 1 이렇게 순서대로 vector에 담기게 된다.
  • a에 있는 값에서, 해당 소문자일 때 값을 증가시키고, b에 있는 값들에서 해당 소문자일 때 값을 감소시키면 a와 b가 공통으로 가지는 것 이외의 개수를 셀 수 있다.
  • 음수를 가지는 것은 b에서 가지는 수이고, 양수는 a에서 가지는 수이다.
  • 따라서 count에서 abs으로 절대값을 씌운 수를 c에 더해가면 최종적으로는 a와 b가 공통으로 가지지 않는 수들의 개수이다.

 

728x90
반응형

관련글 더보기