https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
T = int(input())
for tc in range(1,T+1):
H,W = map(int,input().split())
m = [list(input()) for _ in range(H)]
N = int(input())
command = input()
where_i, where_j = 0,0
dir = ''
# 현재 전차가 있는 위치 찾기
for i in range(H):
for j in range(W):
if m[i][j] in ['<','>','^','v']:
where_i,where_j = i,j
dir = m[i][j]
for c in command:
# 포탄발사
if c == 'S':
if dir == '<':
for i in range(1,W):
if 0<= where_j-i < W:
if m[where_i][where_j-i] == '#': # 강철벽에 포탄 맞으면
break # 멈춤(아무일도 일어나지 않음)
elif m[where_i][where_j-i] == '*': # 벽돌벽에 포탄 맞으면
m[where_i][where_j-i] = '.' # 해당 벽 평지로 바꾸기
break
elif dir == '>':
for i in range(1,W):
if 0<= where_j+i < W:
if m[where_i][where_j+i] == '#':
break # 멈춤
elif m[where_i][where_j+i] == '*':
m[where_i][where_j+i] = '.'
break
elif dir == '^':
for i in range(1,H):
if 0<= where_i-i < H:
if m[where_i-i][where_j] == '#':
break # 멈춤
elif m[where_i-i][where_j] == '*':
m[where_i-i][where_j] = '.'
break
else:
for i in range(1,H):
if 0<= where_i+i < H:
if m[where_i+i][where_j] == '#':
break # 멈춤
elif m[where_i+i][where_j] == '*':
m[where_i+i][where_j] = '.'
break
# 상하좌우 고개돌리기(+이동)
elif c == 'U': # 위
dir = '^' # 방향 위로 바꾸고
if 0<=where_i-1 < H and m[where_i-1][where_j] == '.': # 한칸위가 평지면
m[where_i][where_j] = '.' # 지나온 길 평지로 채워놓기
where_i -= 1 # 한칸위로 이동
elif c == 'D':
dir = 'v'
if 0<=where_i+1 < H and m[where_i+1][where_j] == '.':
m[where_i][where_j] = '.'
where_i += 1
elif c == 'L':
dir = '<'
if 0<=where_j-1 < W and m[where_i][where_j-1] == '.':
m[where_i][where_j] = '.'
where_j -= 1
else:
dir = '>'
if 0<=where_j+1 < W and m[where_i][where_j+1] == '.':
m[where_i][where_j] = '.'
where_j += 1
m[where_i][where_j] = dir # 현재 위치 방향으로 바꾸기
print(f'#{tc}', end=" ")
for i in range(H):
for j in range(W):
print(m[i][j], end="")
print()
조건이 많아서 복붙하면서 실수가 꽤 많았지만 재밌었던 문제!
'swea' 카테고리의 다른 글
13732. 정사각형 판정 (0) | 2023.08.28 |
---|---|
18575. 풍선팡 보너스 게임 (0) | 2023.08.28 |
2805. 농작물 수확하기 (0) | 2023.08.27 |
1926. 간단한 369게임 (0) | 2023.08.27 |
7087. 문제 제목 붙이기 (0) | 2023.08.25 |