파이썬 알고리즘

SWEA 4861 회문

뜻 지, 깨달음 오 2022. 9. 16. 10:19

https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYJ7KE5qKy8DFASv&contestProbId=AX8BH7eaUocDFARO&probBoxId=AYKQQmC6iwUDFAVG&type=USER&problemBoxTitle=String&problemBoxCnt=7 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

가로줄에 회문이 있는 경우와 세로줄에 회문이 있는 경우를 다르게 풀어야하는 문제였다.

세로줄에 회문이 있는 경우, 가로줄 for문 순서를 단순히 바꾸면 아무 일도 일어나지 않는다.

그래서 나는 y축이랑 x축을 바꾼 새로운 배열을 만들어서 가로로 탐색하는 코드를 구현했다.

 

또 참고할 부분은

arr = list('ABCDEFGHIJK')

print(arr[0:len(arr)])
#['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']
print(arr[0:len(arr)][::-1])
#['K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A']
print(arr[len(arr)-1:0:-1])
#['K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B']

[::-1]을 이용하여 array를 뒤집을 수 있다는 것이다.

회문은 앞뒤가 똑같기 때문에 풀때 

원래 문자열과 뒤집은 문자열이랑 비교하면 된다.

print(arr[len(arr)-1:-1:-1])

아까 위에 코드에서 이렇게 코드를 바꾸면 K부터 A까지 거꾸로 출력해줄줄 알았는데

출력이 아예 안되고 빈 리스트만 반환한다 hmm

 

답)

T = int(input())

for tc in range(1, T+1):
    n, m = map(int, input().split())
    arr = [list(input()) for _ in range(n)]

    ans=[]
    #가로줄으로 봤을 때 회문이 있는 경우
    for j in range(n-m+1): #y축 가면서 확인
        for i in range(n): #x축 가면서 확인
            if arr[i][j:j+m] == arr[i][j:j+m][::-1]: #거꾸로 뒤집은거랑 똑같은지 (회문 맞는지)
                ans = arr[i][j:j+m]

    if ans == []: #가로줄에 회문이 없으면
        t_out = []
        for s in range(n): #x축
            t_in = []
            for t in range(n): #y축
                t_in.append(arr[t][s])
            t_out.append(t_in) #새롭게 가로로 탐색할 array 만들어주기

        for y in range(n-m+1): #y축 가면서 확인
            for z in range(n): #x축 가면서 확인
                if t_out[z][y:y+m] == t_out[z][y:y+m][::-1]: #거꾸로 뒤집은거랑 똑같은지 (회문 맞는지)
                    ans = t_out[z][y:y+m]


    print(f'#{tc}', end = ' ')
    for q in range(len(ans)):
        print(ans[q], end='')
    print()

 

'파이썬 알고리즘' 카테고리의 다른 글

SWEA 1216 회문2  (1) 2022.09.16
SWEA 1221 GNS  (0) 2022.09.16
SWEA 2805 농작물 수확하기  (0) 2022.09.12
SWEA 13704 달팽이 숫자  (0) 2022.09.07
SWEA 13565 전기버스  (0) 2022.09.07