코딩테스트/Python
[백준 25643번] [Python] 문자열 탑 쌓기
유노 Uknow
2022. 11. 18. 13:50
https://www.acmicpc.net/problem/25643
25643번: 문자열 탑 쌓기
인경이는 $N$개의 문자열을 쌓아서 문자열 탑을 완성하려고 한다. 탑을 완성하기 위해서는 모든 문자열을 아래에서부터 순서대로 쌓아 올려야 한다. 인경이는 문자열 탑의 꼭대기에 다음 순서의
www.acmicpc.net
난이도 : 브론즈 1
태그 : 문자열, 브루트포스 알고리즘
설명
붙어있는 칸이 완전히 같을때만 탑을 쌓을 수 있습니다.
두 문자열 abc, cab가 있을 때, 겹치게 놓는 방법은 총 5가지 입니다.
1. ab'c', 'c'ab
abc
cab
2. a'bc', 'ca'b
abc
cab
3. 'abc', 'cab'
acb
cab
4. 'ab'c, c'ab'
abc
cab
5. 'a'bc, ca'b'
abc
cab
즉, str1의 맨 끝과 str2의 맨 처음을 비교하고,
str의 맨 끝 두 문자, str2의 처음 두 문자를 비교하는 식으로 진행됩니다.
중간에 모든 문자열을 비교한 이후엔 반대로 진행하게 됩니다.
소스코드
n, m = map(int, input().split(" "))
str = []
for i in range(n):
str.append(input())
for i in range(n - 1):
str1 = str[i]
str2 = str[i + 1]
isAble = False
for j in range(1, m + 1):
if str1[m - j:] == str2[:j]:
isAble = True
break
if str1[:j] == str2[m - j:]:
isAble = True
break
if not isAble:
print(0)
exit(0)
print(1)