import sys; sys.stdin=open('input.txt','r')
T = int(input())
for tc in range(1, T+1):
n, m = map(int, input().split())
arr = [list(input()) for _ in range(n)]
arr_rev = [list(x) for x in zip(*arr)]
ans = ''
for row in arr:
for i in range(n-m+1):
lst = row[i:m+i]
lst_rev = lst[::-1]
if lst == lst_rev:
ans += ''.join(lst)
for row in arr_rev:
for i in range(n-m+1):
lst = row[i:m+i]
lst_rev = lst[::-1]
if lst == lst_rev:
ans += ''.join(lst)
print(f'#{tc} {ans}')
솔직히 코드를 쉽게 짜기위해서는 슬라이싱 밖에 생각이 안난다.
라기보다는 반복문을 돌려서 단순히 회문에 해당하는 알파벳 갯수를 카운팅하기에는
내가 너무 게으르다... 사실 start, end 로 변수두고 비교해도 되긴함
다음부터는 꼭 그렇게 하도록 노력해야겠다...
참고로 전치행렬은
[list(x) for x in zip(*lst)]
의 형식으로 나타낼수 있음을 꼭 기억하자.
import sys; sys.stdin=open('input.txt','r')
T = int(input())
for tc in range(1, T+1):
search = input()
lst = input()
sl = len(search)
ll = len(lst)
ans = 0
for i in range(ll-sl+1):
if lst[i:i+sl] == search:
ans = 1
print(f'#{tc} {ans}')
시작 인덱스가 될수있는 갯수를 고려하여, 슬라이싱하면서 비교하는 식으로 구하기
import sys; sys.stdin=open('input.txt','r')
T = int(input())
for tc in range(1, T+1):
str1 = list(input())
str2 = list(input())
str_dict = dict()
for str in str1:
if str not in str_dict:
str_dict[str] = 0
for key in str_dict.keys():
for str in str2:
if key == str:
str_dict[key] += 1
mx = 0
for key, value in str_dict.items():
if mx < value:
mx = value
print(f'#{tc} {mx}')
딕셔너리를 통해서 내가 구해야하는 알파벳을 담아주고, 나머지 탐색해야하는 문자열들을 하나씩 탐색해서 딕셔너리에 있는 알파벳과 동일하면 +1을 해준다.
그리고 거기서 제일 숫자 큰거를 mx 변수에 저장해서 출력한다.