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값을 도출하게 된다. 만약 인덱스 오류가 난다면 꼭 생각해볼 것
- 만약 조건 범위가 먼저 실해되지 않을 경우, 'False and ?' 연산이 진행되기 때문에
링크💎
후기 😎
- 내가 풀이한 코드가 좋은 코드는 아니다. 다른 사람의 코드가 훨씬 간결하고 빠르게 출력되는 경우가 많았다.
- 팰린드롬 함수를 작성하는 방법과 좋은 코드 리뷰하는 복습시간을 갖도록 하자
'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 |