SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
뭔가 어렵다고 느껴졌는데 생각보다 단순한 알고리즘이였다.
T=int(input())
for tc in range(1,T+1):
#1.입력받기 #2.자료형 정의
N,M=map(int,input().split()) #N:matrix NxN, M:회문길이
arr=[]
for _ in range(N):
arr.append(list(input()))
ans=[]
#3.동작함수
#가로체크
for i in range(N):
for j in range(N-M+1):
rowstr=arr[i][j:j+M] #가로
if rowstr==rowstr[::-1]:
ans=rowstr
break
if ans:
break
#세로체크
if not ans:
for i in range(N-M+1):
for j in range(N):
colstr=[] #세로
for m in range(M):
colstr.append(arr[i+m][j])
if colstr==colstr[::-1]:
ans=colstr
break
if ans:
break
#4.출력
print(f"#{tc} {''.join(map(str,ans))}")
Python에서 sub == sub[::-1] 은 문자열을 거꾸로 출력해주는 표현식이였다는 것을 몰랐어서 좀 더 풀어서 코딩했었다.
<문자열 거꾸로 출력하기>
s = 'ABCDE'
print(s[::-1]) #'EDCBA'
아래 코드는 처음 풀었을 때의 코드이다.
T=int(input())
for tc in range(1,T+1):
#1.입력받기 #2.자료형 정의
N,M=map(int,input().split()) #N:matrix NxN, M:회문길이
arr=[]
for _ in range(N):
arr.append(list(input()))
ans=[]
#3.동작함수
#가로체크
for i in range(N):
for j in range(N-M+1):
rowstr=arr[i][j:j+M] #가로
check_row=True #회문 체크
for m in range(M):
if rowstr[m]!=rowstr[-1-m]:
check_row=False
if check_row==True:
ans=rowstr
#세로체크
for i in range(N-M+1):
for j in range(N):
colstr=[] #세로
for m in range(M):
colstr.append(arr[i+m][j])
check_col=True #회문 체크
for m in range(M):
if colstr[m]!=colstr[-1-m]:
check_col = False
if check_col==True:
ans=colstr
#4.출력
print(f"#{tc} {''.join(map(str,ans))}")'coding test > SW Expert Academy' 카테고리의 다른 글
| [Python] 1855번 영준이의 진짜 BFS (1) | 2025.12.14 |
|---|---|
| 1220. [S/W 문제해결 기본] 5일차 - Magnetic (0) | 2025.05.23 |
| 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 (0) | 2025.05.19 |
| 4881. [파이썬 S/W 문제해결 기본] 5일차 - 배열 최소 합 (0) | 2025.05.12 |
| 5185. [파이썬 S/W 문제해결 구현] 1일차 - 이진수 (0) | 2025.05.09 |