Algorithm/Simulation

[Python] SWEA 1215번 회문1

코딩쪼앙 2023. 5. 11. 20:10

문제

 

SW Expert Academy

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

swexpertacademy.com

문제 풀이 (함수사용)

  • 회문을 탐색하는 함수를 만들어 가로 회문을 탐색한다.
  • 행기준으로 문자리스트를 다시 생성하여 회문 탐색한다.
  • 가로와 세로 기준 회문 개수 더해서 형식에 맞게 출력한다.

코드

# 가로 회문찾기
def find_width_palindrome(word_list):
    cnt = 0
    for i in range(8):
        for j in range(8 - word_len + 1):
            word = word_list[i][j:j+word_len]
            if word == word[::-1]:
                cnt += 1
    return cnt

for tc in range(10):
    word_len = int(input())
    word_list = [list(input()) for _ in range(8)]
    width_palindrome = find_width_palindrome(word_list)

    # 행기준으로 문자 탐색해서 문자리스트 다시 생성
    height_word_list = []
    for i in range(8):
        word = ''
        for j in range(8):
            word += word_list[j][i]
        height_word_list.append(word)
    height_palindrome = find_width_palindrome(height_word_list)

    print(f'#{tc + 1}',height_palindrome + width_palindrome)

문제 풀이 (함수사용 X)

  • 문제에서 설명한 대로 가로일 때 길이가 n인 경우의 모든 문자를 탐색하면서, 그 문자를 뒤집었을 때도 같다면 카운트 해 준다.
  • 세로로 문자를 탐색할 때는 for문을 하나 더 돌려서, 행의 값을 탐색하여 리스트에 붙인 후, 그 문자 리스트가 뒤집었을 때도 같은지 확인하여 같다면 카운트 해 준다.
  • 카운트 한 값을 형식에 맞게 출력한다.

코드

for tc in range(10):
    n = int(input())
    array = [list(input()) for _ in range(8)]
    cnt = 0

    # 가로일 때 회문 구하기
    for i in range(8):
        for j in range(8 - n + 1):
            width_word = array[i][j:j+n]
            if width_word == list(reversed(width_word)):
                cnt += 1

    # 세로일 때 회문 구하기
    for i in range(8):
        for j in range(8 - n + 1):
            height_word = []
            for hw in range(j, j + n):
                height_word.append(array[hw][i])
            if height_word == list(reversed(height_word)):
                cnt += 1
    print(f'#{tc + 1}',cnt)