티스토리 뷰

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


1. 문제 내용

 

 

2. 접근 방식

입력받은 데이터를 가로(행)을 기준으로 회문 검사를 하고, 그 다음에 세로(열)을 기준으로 회문 검사를 진행하면 된다고 생각했다. 따라서 입력 받은 데이터를 horizontal_data라고 하고, 열을 기준으로 다시 구성한 데이터를 vertical_data라고 한 후 각각 회문 개수를 구하였다.

 

 

3. 정답 코드

  • init( ) : 입력 처리 함수
  • transform_into_vertical( ) : [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]라면 [ [1, 4, 7], [2, 5, 8], [3, 6, 9] ]로 변환하는 함수
  • check_palindrome( ) : 회문 검사 함수
  • get_count( ) : 리스트 내의 행을 돌면서 회문 개수를 반환하는 함수
def init() :
    length = int(input())
    data = []
    for i in range(8) :
        data.append(input())
    return length, data

def transform_into_vertical(data) :
    temp = []
    for c in range(8) :
        word = ''
        for r in range(8) :
            word += data[r][c]
        temp.append(word)
    return temp

def check_palindrome(word) :
    if word == word[::-1] :
        return True
    return False

def get_count(length, data) :
    count = 0
    for word in data :
        index = 0
        while index <= 8 - length :
            if check_palindrome(word[ index : index + length ]) :
                count += 1
            index += 1
    return count

for test_case in range(1, 10 + 1):
    length, horizontal_data = init()
    vertical_data = transform_into_vertical(horizontal_data)

    count = get_count(length, horizontal_data)
    count += get_count(length, vertical_data)

    print(f'#{test_case} {count}')
728x90