[파이썬 알고리즘 문제풀이] - Section3 / 탐색 & 시뮬레이션 -11

Chooooo·2023년 1월 25일
0

격자판 회문수

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

빨간색처럼 구부러진 경우(87178)는 회문수로 간주하지 않습니다.

▣ 입력설명
1부터 9까지의 자연수로 채워진 7*7격자판이 주어집니다.

▣ 출력설명
5자리 회문수의 개수를 출력합니다.

import sys
# sys.stdin = open("input.text", "rt")

data = [list(map(int, input().split())) for _ in range(7)]
#5자리 회문수 개수

cnt = 0
#행부터 검사
for x in data:
    for i in range(3):
        temp = x[i:5+i]
        if temp == list(reversed(temp)):   #temp[::-1] 이걸로 표현해도 됨
            cnt += 1

#열 검사
for i in range(7):
    for j in range(3):
        temp = list()
        for k in range(5):
            temp.append(data[j+k][i])
        if temp == list(reversed(temp)):
            cnt += 1

print(cnt)

🎃 코멘트
행단위로는 슬라이싱을 통해 쉽게 비교할 수 있는데, 열 단위로 추출할 때는 슬라이싱으로 추출할 수 없다. 따로 뽑아내서 비교하면 된다. reversed() 메서드는 반환값이 있는데 이걸 객체화 시켜줘야한다. 그렇기에 list로 감싸줌. 그래야 temp와 비교할 수 있어진다. 내장함수 써서 간단하게 처리할 수 있게됨.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글