SWEA 4861 회문
🎮 문제 접근 방법
- N-M+1 만큼 돌면서 한줄씩 건너뛰며 가로에서 먼저 패턴을 찾고 없으면 세로에서 패턴을 찾는다.
- 회문 1개만 찾으면 되니, 회문을 찾으면 BREAK
🎈 문자열을 뒤집는 4가지 방법
- 거꾸로 읽어오는 것
- swap해서 가져오는 것
- reverse 함수를 사용하는 것
- slicing 해서 거꾸로 가져오는것
이 문제는 뒤집진 않아도 되서 swap해서 값을 가져오진 않았지만, swap을 응요한 앞과 뒤를 비교하는 방법을 활용했습니다.
그리고 flag 말고도, for else 혹은 elif 를 활용해서 작성 가능합니다!
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
arr = [list(input()) for _ in range(N)]
#회문 1개 존재, 회문 찾아서 BREAK
ans = ''
# 가로
for row in range(N): # 한줄 건너뛰는
for i in range(N-M+1): # 한줄안에서 얼마나 돌건지
flag = True
for j in range(M//2): # 앞과 뒤 비교하는 것
if arr[row][i+j] != arr[row][i+M-1-j]:
flag = False
break
if flag:
ans = "".join(map(str, arr[row][i:]))
break
else:
# 세로
for col in range(N):
for i in range(N-M+1):
flag = True
for j in range(M // 2):
if arr[i+j][col] != arr[i+M-1-j][col]:
flag = False
break
if flag:
for k in range(M):
ans += arr[i+k][col]
break
print('#{} {}'.format(tc, ans))
swexpertacademy.com/main/learn/course/lectureProblemViewer.do#none
'알고리즘 문제 풀기 > SWEA' 카테고리의 다른 글
SWEA 1216. 회문 2 - 파이썬 (0) | 2021.03.06 |
---|---|
[SWEA 1223] 계산기2 - 스택을 이용한 후위표기식 (0) | 2021.02.25 |
SWEA 4836. 색칠하기 2차원 배열(파이썬) (0) | 2021.02.16 |
SWEA 4839. 이진탐색 알고리즘 - 파이썬 (0) | 2021.02.16 |
[SWEA 1206] View 조망권 구하기 (0) | 2021.02.09 |