※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1919번 문제인 애너그램 만들기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1919
1919번: 애너그램 만들기
두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs
www.acmicpc.net
두 영단어가 철자순서를 바꾸어 같아질 수 있다는 것은 두 단어의 구성 알파벳이 같다는 뜻이다.
따라서, 각 문자열에서 겹치는 문자들만큼을 제외한 모든 문자를 지우는 것이 가장 적은 개수의 문자를 지우는 것이 될 것이다.
알파벳 대소문자는 아스키 코드에서 128보다 작은 정수에 대응되므로, 알파벳별로 두 문자열에 들어있는 개수의 차이를 배열을 이용해 구하면 문제를 간단히 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int arr[128];
int main() {
string s1, s2; cin >> s1 >> s2;
for (auto letter : s1) {
arr[letter]++;
}
for (auto letter : s2) {
arr[letter]--;
}
int ans = 0;
for (auto letter : arr) {
ans += abs(letter);
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2475 // C++] 검증수 (0) | 2021.05.01 |
---|---|
[BOJ 1236 // C++] 성 지키기 (0) | 2021.05.01 |
[BOJ 2557 // C++] Hello World (0) | 2021.05.01 |
[BOJ 9498 // C++] 시험 성적 (0) | 2021.05.01 |
[BOJ 9506 // C++] 약수들의 합 (0) | 2021.05.01 |