[Python]알고리즘/코드업

[기초 - 리스트] ★ 6098 - 성실한 개미

HSY_mumu 2022. 3. 19. 22:23
728x90

6098 - 성실한 개미

1) 문제 해결 아이디어

탈출 조건은 크게 3가지이다.

1) 먹이를 찾았을 경우

2) 맨 아래, 오른쪽에 위치한 경우

3) 오른쪽, 아래쪽이 벽인 경우

 

 

 

2) 소스코드

(풀이1) 내 풀이

시작 지점은 이미 방문한 것으로 처리하고 시작한다.

방향벡터를 설정하여 구현하였다.

# 맵(0: 길, 1: 벽/장애물, 2: 먹이)
# 10 * 10 맵 입력
maze = [list(map(int, input().split())) for _ in range(10)]
x , y = 1, 1  # 현재 좌표(시작 지점으로 초기화)
maze[x][y] = 9  # 현재 좌표 방문 표시

# 이동 방향 (오른쪽, 아래쪽)
dx = [0, 1]
dy = [1, 0]

while True:
  # 오른쪽 좌표
  nx = x + dx[0]
  ny = y + dy[0]

  # 탈출 조건
  # 맨 오른쪽, 아래이면
  if(nx == 8 and ny == 8):  
    break

  # 이동 범위 내이면
  if(0 <= nx < 10 and 0 <= ny < 10):
    # 오른쪽이 길이면
    if(maze[nx][ny] == 0):
      # 오른쪽으로 이동
      x, y = nx, ny
      maze[x][y] = 9  # 방문 표시
    # 오른쪽이 먹이이면   
    elif(maze[nx][ny] == 2):
      x, y = nx, ny
      maze[x][y] = 9  # 방문 표시
      break
    # 오른쪽이 벽이면    
    elif(maze[nx][ny] == 1):
      # 아래쪽 좌표
      nx = x + dx[1]
      ny = y + dy[1]

      if(0 <= nx < 10 and 0 <= ny < 10):
        # 아래쪽이 길이면
        if(maze[nx][ny] == 0):
          # 아래쪽으로 이동
          x, y = nx, ny
          maze[x][y] = 9  # 방문 표시
          continue
        # 아래쪽이 먹이면 탈출
        elif(maze[nx][ny] == 2):
          x, y = nx, ny
          maze[x][y] = 9  # 방문 표시
          break
        # 아래쪽이 벽이면 탈출
        elif(maze[nx][ny] == 1): 
          break
    
# 맵 출력
for i in range(10):
  for j in range(10):
    print(maze[i][j], end=" ")
  print()

(풀이2) 정답 풀이

# 맵(0: 길, 1: 벽/장애물, 2: 먹이)
# 10 * 10 맵 입력
maze = [list(map(int, input().split())) for _ in range(10)]
x, y = 1, 1  # 현재 좌표(시작 지점으로 초기화)
maze[x][y] = 9  # 현재 좌표 방문 표시

while True:
    # 탈출 조건
    # 맨 오른쪽, 아래이면
    if (x == 8 and y == 8):
        break

    # 오른쪽 검사
    # 오른쪽이 길이면
    if (maze[x][y + 1] == 0):
        maze[x][y + 1] = 9  # 방문 표시
        y += 1  # 오른쪽 이동
    # 오른쪽이 벽이면
    elif (maze[x][y + 1] == 1):
        # 아래쪽이 길이면
        if (maze[x + 1][y] == 0):
            maze[x + 1][y] = 9  # 방문 표시
            x += 1  # 오른쪽 이동
        # 아래쪽이 벽이면 탈출
        elif (maze[x + 1][y] == 1):
            break
        # 아래쪽이 먹이면 탈출
        elif (maze[x + 1][y] == 2):
            maze[x + 1][y] = 9  # 방문 표시
            x += 1  # 오른쪽 이동
            break
    # 오른쪽 먹이면 탈출
    elif (maze[x][y + 1] == 2):
        maze[x][y + 1] = 9  # 방문 표시
        y += 1  # 오른쪽 이동
        break

# 맵 출력
for i in range(10):
    for j in range(10):
        print(maze[i][j], end=" ")
    print()
728x90