2022. 3. 22. 21:54ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/11328
11328번: Strfry
C 언어 프로그래밍에서 문자열(string)은 native한 자료형이 아니다. 사실, 문자열은 그저, 문자열의 끝을 표시하기 위한 말단의 NULL이 사용된, 문자들로 이루어진 문자열일 뿐이다. 하지만 프로그래
www.acmicpc.net
접근 방법 - 문자열의 성질을 이용한 문제
백준의 11328번 문제는 문자열의 주요 성질을 이용하여 해결하는 문제이다.
해당 문제는, 한 쌍의 문자열이 서로 배치를 잘 바꾸면 동일한 문자열이 될 수 있는지의 여부를 묻고 있는 문제이다.
위 설명처럼 되기 위해선, 한 쌍의 문자열이 구성하는 알파벳의 종류와 각 개수가 똑같아야 한다.
필자는 밑줄의 조건을 고려하면서 문제를 해결하려 해 보았다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 테스트 케이스의 수(n)를 입력받는다.
2) 한 쌍의 문자열(str1, str2)을 차례로 입력받는다.
3) 각 문자열을 구성하는 알파벳의 개수를 파악하기 위해, 배열 2개(cnt1, cnt2)를 모두 0으로 초기화하며 선언한다.
4) 문자열의 길이만큼 반복문을 실행하여, 각 문자열에 있어 알파벳의 개수를 측정한다.
5) 알파벳 개수 연산이 끝났다면, 연산이 끝난 배열값을 탐색한다.
=> 만일 개수가 다른 알파벳이 있다면 "Impossible"을 출력하고, 모든 알파벳의 개수가 동일하다면 "Possible"을 출력한다.
6) n의 크기만큼 2) ~ 5) 과정을 반복하고, 모든 테스트 케이스가 실행되었다면 실행 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;
//백준 11328번 코드
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 str1; string str2;
int cnt1[26] = { 0 }; int cnt2[26] = { 0 };
cin >> str1 >> str2;
int j = 0;
while (j < str1.length() || j < str2.length()) {
if (str1[j] >= 'a' && str1[j] <= 'z') {
cnt1[str1[j] - 'a']++;
}
if (str2[j] >= 'a' && str2[j] <= 'z') {
cnt2[str2[j] - 'a']++;
}
j++;
}
int count = 0;
for (j = 0; j < 26; j++) {
if (cnt1[j] != cnt2[j]) {
cout << "Impossible" << endl;
break;
}
count++;
}
if (count == 26) { cout << "Possible" << endl; }
}
}
제출 결과
(2022.03.18 백준 11328번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 10926번 ??! (C++/cpp) (0) | 2022.03.25 |
---|---|
[백준 BOJ] 18108번 1998년생인 내가 태국에서는 2541년생?! (C++/cpp) (0) | 2022.03.24 |
[백준 BOJ] 11719번 그대로 출력하기 2 (C++/cpp) (0) | 2022.03.19 |
[백준 BOJ] 10987번 모음의 개수 (C++/cpp) (0) | 2022.03.19 |
[백준 BOJ] 2751번 수 정렬하기 2 (C++/cpp) (0) | 2022.03.19 |