1 분 소요

사용 언어: Python3

문제

스크린샷 2023-04-18 오전 1 22 18

풀이

내 풀이

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문 실행


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기