SSAFY/SWEA

[SWEA] #4861. 회문_파이썬

728x90
반응형

풀기 전 생각해보기😮

  • 이차원 배열에서 회문 찾기

풀이🛫

T = int(input())
for t in range(T):
    N, M = map(int, input().split())
    arr = [list(input()) for i in range(N)]

    li = []
    # row 방향 탐색
    for col in range(N):
        for row in range(N):
            # M이 짝수일 때
            if M%2==0 and arr[col][row-1] == arr[col][row]:
                l = 1
                while 0<=row-1-l<N and 0<=row+l<N and arr[col][row-1-l] == arr[col][row+l]:
                    l += 1
                if l == M//2:
                    for i in range(1,M+1):
                        li.append(arr[col][row-1-l+i])

            # M이 홀수일 때
            elif M%2==1 and 0<=row-1<N and 0<=row+1<N and arr[col][row-1] == arr[col][row+1]:
                l = 1
                while 0<=row-1-l<N and 0<=row+1+l<N and arr[col][row-1-l] == arr[col][row+1+l]:
                    l += 1
                if l == M//2:
                    for i in range(1, M+1):
                        li.append(arr[col][row-1-l+i])

	# col 방향 탐색
    for row in range(N):
        for col in range(N):
            # M이 짝수일 때
            if M%2 == 0 and arr[col-1][row] == arr[col][row]:
                l = 1
                while 0<=col-1-l<N and 0<=col+l<N and arr[col-1-l][row] == arr[col+l][row]:
                    l += 1
                if l == M//2:
                    for i in range(1, M+1):
                        li.append(arr[col-1-l+i][row])

            # M이 홀수일 때
            elif M%2==1 and 0<=col-1<N and 0<=col+1<N and arr[col-1][row] == arr[col+1][row]:
                l = 1
                while 0<=col-1-l<N and 0<=col+1+l<N and arr[col-1-l][row] == arr[col+1+l][row]:
                    l += 1
                if l == M//2:
                    for i in range(1, M+1):
                        li.append(arr[col-1-l+i][row])

    print(f"#{t+1}", end=" ")
    for i in li:
        print(i, end="")
    print()

 

핵심 정리🎁

elif M%2==1 and 0<=row-1<N and 0<=row+1<N and arr[col][row-1] == arr[col][row+1]:
  • while문을 이용해 탐색을 할 때 조건 범위를 가급적이면 앞선 코드에 작성할 수 있도록 한다.
    • 만약 조건 범위가 먼저 실해되지 않을 경우, 'False and ?' 연산이 진행되기 때문에
      ?에 관계없이 False값을 도출하게 된다. 만약 인덱스 오류가 난다면 꼭 생각해볼 것

 

링크💎

 

SW Expert Academy

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

swexpertacademy.com

 

후기 😎

  • 내가 풀이한 코드가 좋은 코드는 아니다. 다른 사람의 코드가 훨씬 간결하고 빠르게 출력되는 경우가 많았다.
  • 팰린드롬 함수를 작성하는 방법과 좋은 코드 리뷰하는 복습시간을 갖도록 하자

 

 

 

'SSAFY > SWEA' 카테고리의 다른 글

[SWEA] #4866. 괄호 검사_파이썬  (0) 2022.08.17
[SWEA] #1216. 회문 2_파이썬  (0) 2022.08.16
[SWEA] #12712. 파리퇴치3_파이썬  (0) 2022.08.16
[SWEA] 1959. 두 개의 숫자열  (0) 2022.08.15
[SWEA] #4831. 전기버스_파이썬  (0) 2022.08.12