[SWEA] 4861_회문

김태민·2021년 8월 21일
0

알고리즘

목록 보기
6/77

Mingssssss

1. 문제

ABBA처럼 어느 방향에서 읽어도 같은 문자열을 회문이라 한다. NxN 크기의 글자판에서 길이가 M인 회문을 찾아 출력하는 프로그램을 만드시오.

회문은 1개가 존재하는데, 가로 뿐만 아니라 세로로 찾아질 수도 있다.

예를 들어 N=10, M=10 일 때, 다음과 같이 회문을 찾을 수 있다.

[입력]

첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50

다음 줄부터 테스트케이스의 첫 줄에 N과 M이 주어진다. 10≤N≤100, 5≤M≤N

다음 줄부터 N개의 글자를 가진 N개의 줄이 주어진다.

[출력]

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

2. 코드

import sys
sys.stdin = open('input.txt')

T = int(input())
for tc in range(T):
    N , M = map(int, (input().split()))

    str_list = [list(map(str, input().split())) for _ in range(N)]
    result = 0
    check_list = []
    cnt = 0

    while M-1+cnt < N:
        for chr_1 in str_list:
            for chr_2 in chr_1[cnt:M-1+cnt]:
                if chr_2 == chr_2[::-1]:
                    result = chr_2
        cnt += 1

    cnt = 0
    while cnt < N:
        for chr_3 in str_list:
            for chr_4 in chr_3[cnt]:
                check_list.append(chr_4)
                if result == 0 and cnt != 0 and check_list == check_list[::-1]:
                    result = check_list
        check_list = []
        cnt += 1

    print('#{0} {1}'.format(tc+1, result))

3. 리뷰

회문 2의 순한맛 버전이다. 회문 탐색할 문자열의 길이도 주어지고,
가로/세로만 탐색하면 되기에 어렵지 않게 풀 수 있었다.

profile
어제보다 성장하는 개발자

0개의 댓글