알고리즘

section3.11 격자판 회문수

gitofjy 2022. 10. 31. 17:01

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

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

 

 

import sys
sys.stdin = open("input.txt", "rt")
chlist = [list(map(int, input().split())) for _ in range(7)]
cnt = 0

# 가로 검사 2개 
for x in range(7):  
    for y in range(3):
        for z in range(2): 
            if chlist[x][y+z] != chlist[x][y+4-z]:
                break
        else:
            cnt += 1

# 세로 검사
for x in range(3):
    for y in range(7):
        for z in range(2):
            if chlist[x+z][y] != chlist[x+4-z][y]:
                break
        else:
            cnt += 1

print(cnt)

 

 

비슷한 문제가 많았어서 어렵지 않았다

가로 세로를 한 번에 검사하고 싶었는데 cnt 값이 이상해져서 따로 진행했다

 

어쨌든 정답

 

 

import sys
sys.stdin = open("input.txt", "rt")
board = [list(map(int, input().split())) for _ in range(7)]
cnt = 0

for i in range(3):
    for j in range(7):
        tmp = board[j][i:i+5]
        if tmp == tmp[::-1]:
            cnt += 1
        for k in range(2):
            if board[i+k][j] != board[i+5-k-1][j]:
                break
        else:
            cnt += 1
print(cnt)

 

 

회문 검사할 때 reverse 사용하면 쉬운 것을 까먹었다

정답 코드가 내 코드에 비해 훨씬 짧다...

잘 익혀두자

 

드디어 section3 끝~!

728x90