1873. 상호의 배틀필드 (SWEA)
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
출처:
나의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
T = int(input())
dir_dict={'U':['^',-1,0],'D':['v',1,0],'L':['<',0,-1],'R':['>',0,1]}
for test_case in range(1, T + 1):
H,W=map(int,input().split())
maps=[]
cur_state=[]
for i in range(H):
tmp_list=list(input())
maps.append(tmp_list)
if not cur_state:
if '<' in tmp_list:
cur_state=['L',i,tmp_list.index('<')]
elif '^' in tmp_list:
cur_state=['U',i,tmp_list.index('^')]
elif '>' in tmp_list:
cur_state=['R',i,tmp_list.index('>')]
elif 'v' in tmp_list:
cur_state=['D',i,tmp_list.index('v')]
cn=int(input())
command=list(input())
for cc in command:
if cc in 'UDLR':
r,c=cur_state[1:]
cur_state[0]=cc
maps[r][c]=dir_dict[cur_state[0]][0]
nr=r+dir_dict[cc][1]
nc=c+dir_dict[cc][2]
if 0<=nr<H and 0<=nc<W and maps[nr][nc]=='.':
cur_state[1]=nr
cur_state[2]=nc
maps[nr][nc]=maps[r][c]
maps[r][c]='.'
elif cc=='S':
tmp_r,tmp_c=cur_state[1:]
tmp_r+=dir_dict[cur_state[0]][1]
tmp_c+=dir_dict[cur_state[0]][2]
while 0<=tmp_r<H and 0<=tmp_c<W and maps[tmp_r][tmp_c]!='#':
if maps[tmp_r][tmp_c]=='*':
maps[tmp_r][tmp_c]='.'
break
tmp_r=tmp_r+dir_dict[cur_state[0]][1]
tmp_c=tmp_c+dir_dict[cur_state[0]][2]
print(f'#{test_case} ',end='')
for i in range(H):
print(''.join(maps[i]))
- 해당 문제는 알고리즘이 없는 단순 구현 문제이다.
- 탱크의 현재 state를 계속 업데이트하고, 그에 따라 포탄을 쐈을 때 maps의 변화를 유지한다.
- 방향은 dictionary에 저장하여 방향에 따라 maps에 업데이트하였다.
This post is licensed under CC BY 4.0 by the author.