[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