문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제 풀이
- 이동하기 편하도록 전차의 방향, 이동 방향, 이동하는 방향에 따른 좌표들을 저장한다.
- 전차가 있는 곳이 시작하는 위치이므로, 시작위치와 전차의 방향을 구한다.
- 그 후, 크게 포탄을 발사하는 경우와, 포탄을 발사하지 않고, 이동하는 두 가지 경우로 나눈 후, 포탄을 발사하는 경우, 벽돌과 강철에 부딪히는 경우 처리 해준다.
- 벽돌에 부딪히는 경우 벽돌 부분을 평지로 바꾼 후, break 해줘야 하고, 강철에 부딪히는 경우 아무런 일도 일어나지 않으므로, 그냥 break 해 줘야 한다.
- 포탄을 발사하지 않는 경우는 이동 방향에 따라 이동한 후, 이동을 마친 후, 최종 위치에 전차의 방향을 구해 전차를 놓는다.
- 출력 형식에 맞게 출력한다.
코드
# 상하좌우
car_direction_list = ['^', 'v', '<', '>']
direction_list = ['U','D','L','R']
move_val = [(-1,0),(1,0),(0,-1),(0,1)]
# 시작 위치와 전차방향 구하는 함수
def get_start_location():
for i in range(h):
for j in range(w):
for k in range(4):
if graph[i][j] == car_direction_list[k]:
return (i, j, car_direction_list[k])
t = int(input())
for tc in range(t):
h, w = map(int,input().split())
graph = [list(input()) for _ in range(h)]
move_times = int(input())
go = list(input())
# 시작하는 위치와 전차방향
y, x, d = get_start_location()
for move in go:
# 포탄 발사하는 경우
if move == 'S':
# 이동해야하는 방향 구하기
move_index = car_direction_list.index(d)
move_y, move_x = move_val[move_index]
ny, nx = y, x
while 0 <= ny < h and 0 <= nx < w:
# 벽돌인 경우
if graph[ny][nx] == '*':
graph[ny][nx] = '.'
break
# 강철인 경우
if graph[ny][nx] == '#':
break
ny += move_y
nx += move_x
# 움직이는 경우
else:
now_index = direction_list.index(move)
r, c = move_val[now_index]
d = car_direction_list[now_index]
# 이동하기
if 0 <= y + r < h and 0 <= x + c < w and graph[y + r][x + c] == '.':
graph[y][x] = '.'
y += r
x += c
graph[y][x] = d
print(f'#{tc + 1}', end=' ')
for i in graph:
print(*i,sep='')'Algorithm > Simulation' 카테고리의 다른 글
| [Python] SWEA 1215번 회문1 (0) | 2023.05.11 |
|---|---|
| [Python] SWEA 2805번 농작물 수확하기 (0) | 2023.05.11 |
| [Python] SWEA 1240번 단순 2진 암호코드 (0) | 2023.05.09 |
| [Python] SWEA 1208번 Flatten (0) | 2023.05.09 |
| [Python] 백준 1543번 문서 검색 (0) | 2023.05.08 |