Hikenny25

3일차 - 회문 본문

SW Expert Academy/Programming - Intermediate

3일차 - 회문

hikenny 2023. 12. 9. 14:41
def is_palindrome(x):
    original = x.copy()
    t = len(x) // 2
    for i in range(t):
        x[i], x[len(x)-1-i] = x[len(x)-1-i], x[i]
    
    if original == x:
        return True
    else:
        return False

t = int(input())
ans = list()

for _ in range(t):
    n, m = map(int, input().split())
    word = [list(input()) for _ in range(n)]

    # 행 회문 계산
    tmp = 0
    for i in range(n):
        for j in range(n-m+1):
            var = list()
            for k in range(m):
                var.append(word[i][j+k])
            
            if is_palindrome(var):
                tmp = 1
                ans.append(''.join(var))
                break
        if tmp == 1:
            break

    # 열 회문 계산
    if tmp == 0:
        for i in range(n):
            for j in range(n-m+1):
                var = list()
                for k in range(m):
                    var.append(word[j+k][i])
                
                if is_palindrome(var):
                    tmp = 1
                    ans.append(''.join(var))
                    break
            if tmp == 1:
                break

for i in range(t):
    print(f"#{i+1} {ans[i]}")

 

회문 판단 함수 만들고 반복문 써서 그냥 구현했다

하고보니 너무 길어서 transpose matrix 구해서 반복문을 한 번 더 돌리는 방식으로 하니 코드 길이는 확실히 줄어들엇따

 

def is_palindrome(x):
    original = x.copy()
    t = len(x) // 2
    for i in range(t):
        x[i], x[len(x)-1-i] = x[len(x)-1-i], x[i]
    
    if original == x:
        return True
    else:
        return False

t = int(input())
ans = list()

for _ in range(t):
    n, m = map(int, input().split())
    word = [list(input()) for _ in range(n)]

    tmp = 0
    for _ in range(2):
        for i in range(n):
            for j in range(n-m+1):
                var = list()
                for k in range(m):
                    var.append(word[i][j+k])
                
                if is_palindrome(var):
                    tmp = 1
                    ans.append(''.join(var))
                    break
            if tmp == 1:
                break
        if tmp == 1:
            break
        else:
            word = list(zip(*word))

for i in range(t):
    print(f"#{i+1} {ans[i]}")

 

transpose matrix 구하는 방법이 numpy 라이브러리를 쓰는 방법하고 list(zip(*matrix_name))으로 구하는 방법이 있던데 나중에 쓸 일이 생기면 내장 함수인 zip으로 구현해서 쓸 것 같아서 zip으로 구하는 방법을 택했다..! 나중에 쓸 일이 있으면 종종 사용할 예정

'SW Expert Academy > Programming - Intermediate' 카테고리의 다른 글

4일차 - 종이붙이기  (0) 2023.12.09
3일차 - 글자수  (0) 2023.12.09
3일차 - 문자열 비교  (0) 2023.12.09
2일차 - 특별한 정렬  (0) 2023.12.09
2일차 - 이진탐색  (0) 2023.12.09
Comments