파이썬 알고리즘

SWEA 1216 회문2

뜻 지, 깨달음 오 2022. 9. 16. 13:38

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

 

SW Expert Academy

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

swexpertacademy.com

 

 

풀기 전에...

https://gkim1011.tistory.com/15

 

SWEA 4861 회문

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

gkim1011.tistory.com

회문을 풀면 회문 2는 상대적으로 더 쉽게 풀수있다.

 

위 링크의 회문 문제는 회문이 있는 단어의 길이가 정해져있었던 반면,

이 문제에서는 회문의 최대 길이를 구해야하기 때문에

3중 for문을 써서 회문의 길이를 증가시켰다.

이때 회문의 길이는 100에서 첫 글자의 x좌표를 뺀 것이어야 한다.

(인덱스에러에 주의)

 

계속 for문을 돌면서, 회문 길이를 cnt에 저장하고,

그 cnt가 MAX보다 크면 MAX를 새롭게 바꿔주었다.

그럼 전체 배열을 돌면 MAX는 최대 회문의 길이가 된다.

 

T = 10

for tc in range(1, T+1):
    n = int(input())
    arr = [list(input()) for _ in range(100)]
    MAX = 0
    cnt = 0
    #가로로 가장 큰 회문 찾기
    for i in range(100):
        for j in range(100):
            for k in range(100-j+1):
                if arr[i][j:j+k] == arr[i][j:j+k][::-1]:
                    cnt= k
                    if cnt>MAX:
                        MAX=cnt

    #세로로 가장 큰 회문 찾기
    #먼저 가로세로 바꾼 arr 새로 만들기
    temp_out = []
    for s in range(100):
        temp_in = []
        for t in range(100):
            temp_in.append(arr[t][s])
        temp_out.append(temp_in)
    # print(temp_out)

    for n in range(100):
        for m in range(100):
            for l in range(100-m+1):
                if temp_out[n][m:m+l] == temp_out[n][m:m+l][::-1]:
                    cnt=l
                    if cnt > MAX:
                        MAX = cnt

    print(f'#{tc} {MAX}')

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

재귀 DFS 문제: 단어 최소 사용 개수 구하기  (0) 2022.09.18
SWEA 1210 사다리  (1) 2022.09.16
SWEA 1221 GNS  (0) 2022.09.16
SWEA 4861 회문  (0) 2022.09.16
SWEA 2805 농작물 수확하기  (0) 2022.09.12