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

 

이번에 볼 문제는 백준 25643번 문제인 문자열 탑 쌓기이다.
문제는 아래 링크를 확인하자.

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

 

25643번: 문자열 탑 쌓기

인경이는 $N$개의 문자열을 쌓아서 문자열 탑을 완성하려고 한다. 탑을 완성하기 위해서는 모든 문자열을 아래에서부터 순서대로 쌓아 올려야 한다. 인경이는 문자열 탑의 꼭대기에 다음 순서의

www.acmicpc.net

주어진 문자열들을 순서대로 쌓아야하므로, 순서가 인접한 두 문자열 사이에 길이 1 이상인 공통인 접미사-접두사 관계의 부분문자열이 있는지를 확인하는 것으로 문제를 해결할 수 있다.

 

그러한 부분문자열이 있는지 여부를 알아내기 위해 겹칠 수 있는 모든 위치의 가짓수에 대해 단순히 전부 시도(브루트포스)하는 코드를 작성하고 문제를 해결하자.

 

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

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

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

	int N, slen; cin >> N >> slen; N--;
	string old; cin >> old;
	while (N--) {
		bool chk = 0;
		string s; cin >> s;
		if (old == s) chk = 1;
		for (int i = 1; i < slen; i++) {
			if (old.substr(0, i) == s.substr(slen - i, i)) chk = 1;
			if (s.substr(0, i) == old.substr(slen - i, i)) chk = 1;
		}
		if (!chk) {
			cout << 0;
			return 0;
		}
		swap(old, s);
	}

	cout << 1;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 25644 // C++] 최대 상승  (0) 2022.10.28
[BOJ 25631 // C++] 마트료시카 합치기  (0) 2022.10.27
[BOJ 25642 // C++] 젓가락 게임  (0) 2022.10.25
[BOJ 25641 // C++] 균형 잡힌 소떡소떡  (0) 2022.10.24
[BOJ 25640 // C++] MBTI  (0) 2022.10.23

+ Recent posts