※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts