※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5052번 문제인 전화번호 목록이다.
문제는 아래 링크를 확인하자.

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

 

5052번: 전화번호 목록

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가

www.acmicpc.net

주어지는 문자열들 중에 한 문자열이 다른 문자열의 접두사가 되는 경우가 있는지 판단하는 문제이다.

 

주어지는 문자열들을 사전순으로 정렬하면 한 문자열이 다른 문자열의 접두사가 되는 두 문자열은 붙어있게 된다.

 

따라서 주어지는 문자열을 사전순으로 정렬하고, 연속한 두 문자열들의 포함관계를 조사하는 것으로 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string s[10000];

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

	int T; cin >> T;
	while (T--) {
		bool chk = 1;
		int N; cin >> N;
		for (int i = 0; i < N; i++) cin >> s[i];
		sort(s, s + N);
		for (int i = 1; i < N; i++) {
			string& s1 = s[i - 1], s2 = s[i];
			int s1len = s1.length(), s2len = s2.length();
			if (s1len > s2len) continue;
			if (s2.substr(0, s1len) == s1) chk = 0;
		}
		if (chk) cout << "YES\n";
		else cout << "NO\n";
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 2041 // C++] 숫자채우기  (0) 2022.07.06
[BOJ 11058 // C++] 크리보드  (0) 2022.07.05
[BOJ 14714 // C++] 홍삼 게임 (Easy)  (0) 2022.07.03
[BOJ 23254 // C++] 나는 기말고사형 인간이야  (0) 2022.07.03
[BOJ 9002 // C++] Match Maker  (0) 2022.07.03

+ Recent posts