• while 루프 언제 쓰나 만약 조건에 따라 변수를 내 마음대로 조절(건너뛰거나, 다시 뒤로 가거나 등)하고 싶다면, for 대신 while. 어차피 for 쓰면 for문 돌 때마다 변수가 초기화

  • 슬라이싱 적극 활용 p_indexshift를 일일이 계산하면 실수할 확률이 높다. 변수도 많고 인덱스도 더럽고 슬라이싱 쓰면 p_indexshift 아예 필요 없음 제미나이는 target (target = list_type[row][column:column+m]) 전체를 뒤집어서 봤는데 (target [ : : -1]) 나는 반만 뒤집어서 봄 (계산 아끼는 접근) 그치만 저 방식도 기억해 둬야

  • 투 포인터? 근데 내가 접근한 방식이 투포인터와 유사한 방식이라고 하네? 투 포인터(Two Pointers): 리스트나 배열에서 두 인덱스 동시에 다루기 본 문제의 경우: 단어의 맨 앞 인덱스(left) & 맨 뒤 인덱스(right)가 2개의 포인터가 됨 비교 left는 한 칸 뒤로, right은 한 칸 앞으로 이동 후 비교, 서로 교차 / 만날 때 까지 같다면 회문 판정 (m//2)


T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
 
    n, m = map(int, input().split())
    r_input = [list(input()) for _ in range (n)] #list 안에 str이 들어있는 형태
    c_input = list(zip(*r_input))
    #p_index = 0
    #shift = 0
    answer= []
    target = []
    
    for list_type in r_input, c_input:
        for row in range (n):
            for column in range (n-m+1):
                target = list_type[row][column:column+m] 
                #어차피 슬라이싱이라 뒤에건 포함 x -> m 그대로 쓰기
                #이렇게 잘라두고 들어가니 출력시 더 편함
                i = 0
                while i <= m//2:
                    #print (i)
                    if target[i] == target[m-i-1]:
                        if i == m//2:
                            # answer = str(target) -> '['도 하나 하나 문자가 되어서 저장됨
                            answer = "".join(target) # 다시 등장한 join메소드! 중요중요. 앞에 구분자 정할 수 있어 좋음
                            break
                        else:
                            i += 1
                    else:
                        i = 0
                        break
    print (f'#{test_case}', answer) # *answer
 
'''
 for t_index in range (n-m+1): #타겟 인덱스 (n-m)으로 범위 설정하면 길이 같을 때 안 돈다ㅠ
                p_index = 0 #초기화 위치 제발...
                shift = 0
                while p_index <= m//2: # 패턴 인덱스
                    if list_type[row][p_index+shift] == list_type[row][m-p_index-1+shift]:
                        p_index += 1
                        print (p_index)
                    else:
                        p_index = 0
                        shift += 1
                        break
    print (f&quot;#{test_case} {answer}&quot;) 
    # 슬라이싱 좀 쓰자... 근데 이게 나중에 많이 쓰이는 투포인터 방식이라고?'''