[백준 BOJ] 6996번 애너그램 (C++/cpp)

2023. 2. 23. 17:31PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/6996

 

6996번: 애너그램

첫째 줄에 테스트 케이스의 개수(<100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 100을 넘지 않는 단어가 공백으로 구분되어서 주어진다. 단어는 알파벳 소문자로만 이루어

www.acmicpc.net

백준 BOJ 6996번 애너그램 문제 사진

 

접근 방법 - 정렬을 이용한 기본 문제

백준의 6996번 문제는 정렬의 원리를 응용하여 해결할 수 있는 기초적인 문제이다.

해당 문제는, 2개의 문자열에 대하여 애너그램인지 아닌지의 여부를 구하여 출력해야 하는 문제이다.

이때 둘 중 하나의 문자열의 알파벳 순서를 변경하여 다른 문자열을 만들 수 있다면, 이 둘을 애너그램이라고 칭한다.

따라서 필자는 둘의 알파벳 구성과 개수만 같은지 아닌지만 알게 되면 정답을 구할 수 있을 것이라 생각하였다.

그리고 실제로 그렇게 코드를 구성하여 해당 문제를 해결할 수 있었다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해 보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 테스트 케이스의 수(n)를 입력받는다.

 

2) n의 크기만큼, 반복문을 수행하여 아래의 연산을 취한다.

- 2개의 문자열(a, b)을 입력받는다.

- 정렬 연산으로 문자열에 변형을 주기 전에 출력 형식을 맞추기 위해, 2개의 문자열을 순차적으로 우선 출력한다. 

( " [문자열 A] & [문자열 B] " 까지만 출력하도록 한다.)

- sort() 함수를 통해, 각 문자열에 대하여 정렬 연산을 수행한다.

- 2개의 문자열을 비교하여, 그 결과에 따라 정답을 출력한다.

만약 2개의 문자열이 같다면, 이 둘은 애너그램이다. 따라서 이 경우엔 " are anagrams."를 출력한다.

다만 2개의 문자열이 다르다면, 이 둘은 애너그램이 아니다. 따라서 이 경우엔 " are NOT anagrams."를 출력한다.

 

3) 모든 테스트 케이스를 수행하였다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <algorithm>
#define endl '\n'
using namespace std;

//백준 6996번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		string a, b;
		cin >> a >> b;
		cout << a << " & " << b;

		sort(a.begin(), a.end());
		sort(b.begin(), b.end());
		if (a == b) {
			cout << " are anagrams."<<endl;
		}
		else {
			cout << " are NOT anagrams."<<endl;
		}
	}
}

 

제출 결과

백준 BOJ 6996번 애너그램 문제 C++ 제출 결과

(2022.05.08 백준 6996번 문제 제출 결과)

반응형