https://www.acmicpc.net/problem/11328
*의사코드
1. v1, v2에 알파벳 등장횟수저장 // v[a] == a 등장횟수
2. 모든값이 같으면 같은배열임 -> 순서바꿔서 같은 문자열로 만들수있음 -> Possible
3. else -> 불가능
* tc문제는 visit을 초기화하라
for (int i = 0; i < tc; ++i){
fill(v1,v1+26,0);
fill(v2, v2 + 26, 0);
* 카운팅 배열 동등비교시 +1 -1하고 값이 0이면 같은배열
- 바킹독 코드
// Authored by : OceanShape
// Co-authored by : BaaaaaaaaaaarkingDog
// http://boj.kr/a3d03c0124b544759d306668e55bbf4b
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
while (N--) {
int a[26] = {}; // 각 문자의 개수를 저장하는 배열
string s1, s2;
cin >> s1 >> s2;
for (auto c : s1) a[c-'a']++; // 첫 번째 문자열의 각 문자는 개수+1
for (auto c : s2) a[c-'a']--; // 두 번째 문자열의 각 문자는 개수-1
// 0이 아닌 배열의 요소가 있을 경우, 개수가 다른 문자가 존재하므로 false
bool isPossible = true;
// 중괄호가 없어도 문제는 없으나 가독성을 위해 삽입
for (int i : a){
if (i != 0) isPossible = false;
}
if(isPossible) cout << "Possible\n";
else cout << "Impossible\n";
}
}
*내코드
#include <bits/stdc++.h>
using namespace std;
int tc,v1[26], v2[26];
string s1, s2;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> tc;
for (int i = 0; i < tc; ++i) {
fill(v1,v1+26,0);
fill(v2, v2 + 26, 0);
/*
* str1 과 str2의
* 알파벳 갯수가 같으면 possible이다.
*/
cin >> s1 >> s2;
if (s1.size() != s2.size()) {
cout << "Impossible\n";
continue;
}
for (int i = 0; i < s1.size(); ++i) {
v1[s1[i] - 'a']++;
v2[s2[i] - 'a']++;
}
bool all_same = true;
for (int i = 0; i < 26; ++i) {
if (v1[i] != v2[i]) {
all_same = false;
break;
}
}
if (all_same) {
cout << "Possible\n";
}
else {
cout << "Impossible\n";
}
}
}
'Algorithm > 배열' 카테고리의 다른 글
프로그래머스 주차요금계산 c++ // 구현, db설정하라 (0) | 2023.12.08 |
---|---|
백준 1919 cpp // 문자열 차이검사는 +1, -1로 비교하라 (0) | 2023.08.16 |
백준 13300 방배정 cpp // visited배열활용 , 몇 묶음인지 구현하는법 (0) | 2023.08.16 |
백준 10807 개수 세기 // visited 배열이용한 풀이방법 (0) | 2023.08.16 |
백준 3273 cpp // 두수의 차 visited 배열활용 (0) | 2023.08.14 |