마치 게임을 개발하는 듯한 기분이 들어서 재밌었다.
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
주어진 맵에서 입력받은 명령을 수행했을 때, 변경된 맵을 출력하는 문제
[제약사항]
두 정수 H, W (2 ≤ H, W ≤ 20)
- 정수 N(0 < N ≤ 100)
field
를 입력 받을 때 문자열이 낱개로 분리된 리스트로 입력받아 변경을 용이하게 만들었다. findme
함수를 사용해 현재의 위치와 보고있는 방향을 받아왔다.drc_list
)를 가져왔다. 해당 방향으로 진행하며, 포탄이 범위밖으로 벗어날 때까지 while문을 돌렸다.
'.'
)라면, 현재 위치를 평지로 바꾼후 좌표를 이동, 이동 후 좌표에 탱크의 모습을 표시한다.def findme():
for r in range(H):
for c in range(W):
for i in range(4):
if field[r][c] == direction_list[i]:
return (r, c, direction_list[i])
# 1. 상하좌우
cmd_dir_list = ['U', 'D', 'L', 'R']
drc_list = [(-1, 0), (1, 0), (0, -1), (0, 1)]
direction_list = ['^', 'v', '<', '>']
# 2. input
T = int(input())
for tc in range(1, T+1):
H, W = map(int, input().split())
field = [list(input()) for _ in range(H)]
N = int(input())
cmd_list = input()
me_r, me_c, me = findme()
for cmd in cmd_list:
if cmd == 'S': # 3. 포탄 발사
bomb_idx = direction_list.index(me)
b_r, b_c = drc_list[bomb_idx]
bomb_r, bomb_c = me_r, me_c
while 0 <= bomb_r < H and 0 <= bomb_c < W:
if field[bomb_r][bomb_c] == '#':
break
if field[bomb_r][bomb_c] == '*':
field[bomb_r][bomb_c] = '.'
break
bomb_r += b_r
bomb_c += b_c
else: # 4. move
me_idx = cmd_dir_list.index(cmd)
r, c = drc_list[me_idx]
me = direction_list[me_idx]
if 0 <= me_r + r < H and 0 <= me_c + c < W and field[me_r + r][me_c + c] == '.':
field[me_r][me_c] = '.'
me_r += r
me_c += c
field[me_r][me_c] = me
print('#', tc, sep='', end=' ')
for f in field:
print(*f, sep='')
[SWEA] #1859 백만 장자 프로젝트.python(파이썬) (0) | 2021.08.18 |
---|---|
[SWEA] #4408 자기 방으로 돌아가기.python(파이썬) (0) | 2021.08.17 |
[SWEA] #5356 의석이의 세로로 말해요.python(파이썬) (0) | 2021.08.16 |
[SWEA] #5432 쇠막대기 자르기 평범한 숫자.python(파이썬) (0) | 2021.08.15 |
[SWEA] #1961 숫자 배열 회전.python(파이썬) (0) | 2021.08.15 |