Post
1873. 상호의 배틀필드 (SWEA) | Gihun Son

1873. 상호의 배틀필드 (SWEA)

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

출처:

SW Expert Academy

나의 풀이

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.