Uknow's Lab.
article thumbnail

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)

 

 

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.