반응형
DoZZang
Do IT
DoZZang
전체 방문자
오늘
어제
  • Programming
    • Git
    • Web
    • 기타
    • Python
      • CodeUp
    • Math
    • Algorithm
    • Baekjoon
    • C,C++
    • Life
      • 독서
      • Just
      • 영화

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DoZZang

Do IT

[C++] 백준 11328번 : Strfry
카테고리 없음

[C++] 백준 11328번 : Strfry

2024. 2. 23. 12:29
반응형

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

 

11328번: Strfry

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

www.acmicpc.net

풀이

 

소문자 알파벳의 개수는 26개임을 이용하여 크기가 26인 배열을 만들고

첫 번째 문자열을 구성하는 문자들의 횟수를 배열에 저장할 수 있도록하고, 마찬가지로 두 번째 문자열을 구성하는 문자들의 횟수를 배열에 저장할 수 있도록 하여

비교하는 방식을 사용하였습니다.

 

풀면서도 더 효율적인 방법이 있을 것 같다는 생각을 하였는데 역시 존재했습니다.

 

내 코드

 

#include <bits/stdc++.h>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N, l;
	string a, b;
	cin >> N;
	for (int i = 0; i < N; i++) {
		int al[26] = {}, al2[26] = {};
		cin >> a >> b;
		for (int j = 0; j < a.size(); j++)
			al[a[j] - 'a']++;
		for (int k = 0; k < b.size(); k++)
			al2[b[k] - 'a']++;
		for (l = 0; l < 26; l++)
			if (al[l] != al2[l])
			{
				cout << "Impossible" << '\n';
				break;
			}
		if (l == 26)
			cout << "Possible" << '\n';
	}}

 

 

모범 답안

배열 하나를 덜 사용할 수 있습니다.

배열을 이용하여 같은 것을 찾는 경우 '뺀다'라는 선택지가 있음을 깨달음

 

#include <bits/stdc++.h>
using namespace std;
// Authored by : OceanShape
// Co-authored by : BaaaaaaaaaaarkingDog

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N, l;
	string a, b;
	cin >> N;
	for (int i = 0; i < N; i++) {
		int al[26] = {};
		cin >> a >> b;

		for (auto c : a) al[c - 'a']++;
		for (auto c : b) al[c - 'b']--;

		bool isPossible = true;
		for (int i : al) {
			if (i != 0) isPossible = false;
		}

		if (isPossible) cout << "Possible\n";
		else cout << "Impossible\n";
	}
	
}

 

반응형
저작자표시 (새창열림)
    DoZZang
    DoZZang
    과정은 힘들지만 성장은 즐겁습니다.

    티스토리툴바