티스토리 뷰

교재에 서술된 정답 코드가 아닌, 제가 직접 작성한 코드입니다.


  • solution 함수를 구현하여 입력문 생략
  • 게임 캐릭터의 방향과 방문지 출력 등의 테스트 코드 포함
  • 책에 있는 코드와의 차이점
    1. turn_left() 함수 미사용
    2. 방문한 위치를 저장하기 위한 맵 미사용 (메모리 효율적)
def solution(n, m, x, y, d, maps) :

  steps = [ [-1, 0], [0, 1], [1, 0], [0, -1] ] # index is the direction 0, 1, 2, 3

  count = 1
  maps[x][y] = -1 # if visited, change value to -1
  limit = 4
  print(f'*** visited: {[x, y]} ***')
  while True :
    d = d - 1 if d - 1 >= 0 else 3 # turn left

    dx, dy = x + steps[d][0], y + steps[d][1]
    print(f'{[dx, dy]}, 방향: {d}, maps[dx][dy] = {maps[dx][dy]}, limit = {limit}')
    
    if maps[dx][dy] == 0 : # Land (not visited)
      count += 1
      x, y = dx, dy
      maps[x][y] = -1
      print(f'*** visited: {[x, y]} ***')
      limit = 4 # reset the value

    elif maps[dx][dy] in [-1, 1] : # Sea or Visited
      limit -= 1

    if limit == 0 : # No way to go
      dx, dy = x - steps[d][0], y - steps[d][1] # take a back step
      print(f'back step: {[dx, dy]}, maps[dx][dy] = {maps[dx][dy]}')
      if maps[dx][dy] == 1 : # if sea, end the game
        break
      else :
        x, y = dx, dy
        limit = 4
        
  print(count)
      

solution(4, 4, 1, 1, 0, [[1, 1, 1, 1], [1, 0, 0, 1], [1, 1, 0, 1], [1, 1, 1, 1]])

 

728x90