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
'[Python]알고리즘 > 코드업' 카테고리의 다른 글
[기초-리스트] 6097 - 설탕과자 뽑기 (0) | 2022.03.18 |
---|---|
[기초-리스트] 6096 - 바둑알 십자 뒤집기 (0) | 2022.03.17 |
[기초-리스트] ▲ 6095 - 바둑판에 흰 돌 놓기 (0) | 2022.03.17 |
[기초-리스트] 6094 - 이상한 출석 번호 부르기3 (0) | 2022.03.17 |
[기초-리스트] 6093 - 이상한 출석 번호 부르기2 (0) | 2022.03.17 |