관리 메뉴

Mini

백준 11328 cpp // tc문제는 visit을 초기화하라 , 카운팅 배열 동등비교시 +1 -1하고 값이 0이면 같은배열 본문

Algorithm/배열

백준 11328 cpp // tc문제는 visit을 초기화하라 , 카운팅 배열 동등비교시 +1 -1하고 값이 0이면 같은배열

Mini_96 2023. 8. 16. 19:44

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

 

11328번: Strfry

C 언어 프로그래밍에서 문자열(string)은 native한 자료형이 아니다. 사실, 문자열은 그저, 문자열의 끝을 표시하기 위한 말단의 NULL이 사용된, 문자들로 이루어진 문자열일 뿐이다. 하지만 프로그래

www.acmicpc.net

*의사코드

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";
		}
	}
}