[김태원 알고리즘] 격자판 회문수
사용 언어: Python3
문제
풀이
내 풀이
from copy import deepcopy
N = 7
board = [list(map(int, input().split())) for _ in range(N)]
ans = 0
def check(board): # 가로 방향 회문 체크
global ans
for i in range(N):
for j in range(N-5+1):
tmp = board[i][j:j+5]
if tmp == tmp[::-1]: # ✅ 회문 체크
ans += 1
def rotate90(board):
newBoard = deepcopy(board)
for i in range(N):
for j in range(N):
newBoard[j][N-1-i] = board[i][j] # ✅ 회전
return newBoard
check(board) # 가로 방향
board = rotate90(board) # 보드판 90도 회전
check(board) # 세로 방향
print(ans)
- 성공!
- 방향은 한 방향으로 고정하고, 보드판을 90도 돌려 가로방향과 세로방향 회문 체크
다른 풀이
N = 7
board = [list(map(int, input().split())) for _ in range(N)]
ans = 0
for i in range(3):
for j in range(N):
# 가로 회문 체크
tmp = board[j][i:i+5]
if tmp == tmp[::-1]: # ✅ 슬라이싱으로 회문 체크
ans += 1
# 세로 회문 체크 (슬라이싱 사용 불가)
for k in range(5//2): # ✅ for문으로 길이가 5인 회문 체크
if board[i+k][j] != board[(i+5-k)-1][j]:
break
else: # ✅ for ~ else문
ans += 1
print(ans)
- 세로 회문은 슬라이싱으로 체크할 수 없다.
0번째와 4번째
/1번째와 3번째
원소가 각각 동일한지 for문으로 체크해야 한다.
- 🌟
for ~ else
문 숙지!- break 당하지 않고 정상적으로 for문 끝났을 때 else문 실행
💛 개인 공부 기록용 블로그입니다. 👻