Lumpy Space Princess - Adventure Time
코딩테스트/파이썬 알고리즘 문제풀이 입문

[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 격자판 회문수

yaebb_82 2023. 5. 3.

*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.

 

 

 

문제

1부터 9까지의 자연수로 채워진 7*7 격자판이 주어지면 격자판 위에서 가로방향 또는 세로방향으로 길이 5자리 회문수가 몇 개 있는지 구하는 프로그램을 작성하세요. 회문수란 121과 같이 앞에서부터 읽으나 뒤에서부터 읽으나 같은 수를 말합니다.

 

 

 

풀이

• 답안 : Python

import sys
input = sys.stdin.readline

a = [list(map(int, input().split())) for _ in range(7)]
count = 0

for i in range(3):
    for j in range(7):
        # 행 (슬라이스가 가능)
        tmp = a[j][i:i+5]
        if tmp == tmp[::-1]:
            count += 1

        # 열
        for k in range(2):
            if a[i+k][j] != a[i+5-k-1][j]:
                break
        else:
            count += 1

print(count)

- 5개가 담겨져 있는 묶음이 한 줄에서 이동 가능한 횟수 : 3번

- 주어진 리스트 한 줄 전체 요소 갯수 : 7개

- 하나의 묶음 안에서 앞/뒤 일치하는지 확인하는 횟수 : 2번

   (행 같은 경우에는 리스트 슬라이스가 가능하지만, 열 같은 경우에는 슬라이스가 불가능하기 때문에 for문이 필요하다.)

   → 때문에 3중 for문 필요!

 

- 행 : 슬라이스로 접근 → 슬라이스한 것과, 뒤집은 것이 일치한다면 count를 1 증가한다.

- 열 : 인덱스로 접근 → 앞/뒤 일치하지 않으면 break로 for문을 나가게 되고, 앞/뒤 일치해서 for문이 다 돌게 되면 count를 1 증가한다.

 

 

 

반응형

댓글