← Back to List

26169번: 세 번 이내에 사과를 먹자 ↗

Solutions

Python 3
1.6 KB | 1568 chars
"""
[26169: 세 번 이내에 사과를 먹자](https://www.acmicpc.net/problem/26169)

Tier: Silver 3 
Category: backtracking, dfs, graphs, graph_traversal
"""


import sys
from math import sqrt, pi, sin, factorial, ceil, floor
from datetime import datetime, timedelta
from collections import deque

SYS_INPUT = True
RECURSION_LIMIT = 10 ** 7
SET_RECURSION = False
BLANK = " "

if SET_RECURSION:
  sys.setrecursionlimit(RECURSION_LIMIT)

inp = lambda : sys.stdin.readline().rstrip() if SYS_INPUT else input()
mii = lambda : [*map(int,inp().split())]
mfi = lambda : [*map(float,inp().split())]
ii = lambda : int(inp())
fi = lambda : float(inp())
isplit = lambda : inp().split()
p = print

def gcd(a, b): return gcd(b, a % b) if b > 0 else a
def lcm(a, b): return a * b // gcd(a, b)


def solve():
  l = [mii() for _ in range(5)] # 1: 사과, -1: 벽, 0: 빈 공간
  
  r, c = mii() # start point
  
  ans = False
  
  dx = [0, 0, 1, -1]
  dy = [1, -1, 0, 0]
  
  def dfs(current):
    r, c, cnt, move_cnt = current
    
    if cnt >= 2:
      return True
    
    if move_cnt == 3:
      return False
    
    for i in range(4):
      nr, nc = r + dy[i], c + dx[i]
      
      if nr < 0 or nc < 0 or nr >= 5 or nc >= 5 or l[nr][nc] == -1:
        continue
      
      org = l[nr][nc]
      l[nr][nc] = -1
      if dfs([nr, nc, cnt + org, move_cnt + 1]):
        return True
      
      l[nr][nc] = org
    
    return False
  

  org = l[r][c]  
  l[r][c] = -1
  ret = dfs([r, c, org, 0])
  
  print(int(ret))

  

if __name__ == "__main__":
  tc = 1
  for t in range(1, tc+1):
    ret = solve()