728x90
[๋ฌธ์ ๋งํฌ] ๐
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
Solution
# ๋ฐฉํฅ์ ๋ฐ๋ฅธ ์ ์ฐจ ๋ชจ์ ๋ฐ ์ด๋ (๋ถ, ๋จ, ์, ๋)
tank_direction = {'^': 0, 'v': 1, '<': 2, '>': 3}
direction_symbols = ['^', 'v', '<', '>']
dx = [-1, 1, 0, 0] # ์, ํ, ์ข, ์ฐ ์ด๋ (๋ถ, ๋จ, ์, ๋)
dy = [0, 0, -1, 1]
# ๋ช
๋ น์ด ์ํ
def execute_commands(H, W, game_map, commands):
# ์ ์ฐจ ์์น ์ฐพ๊ธฐ
for i in range(H):
for j in range(W):
if game_map[i][j] in tank_direction:
x, y = i, j
direction = tank_direction[game_map[i][j]]
game_map[i][j] = '.'
# ๋ช
๋ น์ด ์ํ
for command in commands:
if command == 'S': # ํฌํ ๋ฐ์ฌ
nx, ny = x, y
while True:
nx += dx[direction]
ny += dy[direction]
if nx < 0 or nx >= H or ny < 0 or ny >= W:
break
if game_map[nx][ny] == '#':
break
if game_map[nx][ny] == '*':
game_map[nx][ny] = '.'
break
else: # ์ด๋ ๋ช
๋ น
direction = {'U': 0, 'D': 1, 'L': 2, 'R': 3}[command]
game_map[x][y] = direction_symbols[direction]
nx, ny = x + dx[direction], y + dy[direction]
if 0 <= nx < H and 0 <= ny < W and game_map[nx][ny] == '.':
x, y = nx, ny
# ์ ์ฐจ ์์น ํ์
game_map[x][y] = direction_symbols[direction]
return game_map
# ๋ฉ์ธ ํจ์
T = int(input())
for test_case in range(1, T + 1):
H, W = map(int, input().split())
game_map = [list(input().strip()) for _ in range(H)]
N = int(input())
commands = input().strip()
# ๋ช
๋ น์ด ์ฒ๋ฆฌ ํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
result_map = execute_commands(H, W, game_map, commands)
print(f"#{test_case}")
for row in result_map:
print("".join(row))
๋ด ํ์ด
def up(board, x, y):
# ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ฑฐ๋, ๋ฒฝ์ด๊ฑฐ๋, ๋ฌผ์ผ ๋ ์ด๋ ๊ธ์ง
if x - 1 >= 0 and board[x-1][y] != '#' and board[x-1][y] != '*' and board[x-1][y] != '-':
board[x][y] = '.'
board[x - 1][y] = '^'
return board, x - 1, y
board[x][y] = '^'
return board, x, y
def down(board, x, y):
if x + 1 < H and board[x+1][y] != '#' and board[x+1][y] != '*' and board[x+1][y] != '-':
board[x][y] = '.'
board[x + 1][y] = 'v'
return board, x + 1, y
board[x][y] = 'v'
return board, x, y
def left(board, x, y):
if y - 1 >= 0 and board[x][y - 1] != '#' and board[x][y - 1] != '*' and board[x][y - 1] != '-':
board[x][y] = '.'
board[x][y - 1] = '<'
return board, x, y - 1
board[x][y] = '<'
return board, x, y
def right(board, x, y):
if y + 1 < W and board[x][y + 1] != '#' and board[x][y + 1] != '*' and board[x][y + 1] != '-':
board[x][y] = '.'
board[x][y + 1] = '>'
return board, x, y + 1
board[x][y] = '>'
return board, x, y
def shoot(board, x, y):
if board[x][y] == '>':
for i in range(y + 1, W):
if board[x][i] == '*':
board[x][i] = '.'
return board, x, y
elif board[x][i] == '#':
return board, x, y
elif board[x][y] == '<':
for i in range(y - 1, -1, -1):
if board[x][i] == '*':
board[x][i] = '.'
return board, x, y
elif board[x][i] == '#':
return board, x, y
elif board[x][y] == '^':
for i in range(x - 1, -1, -1):
if board[i][y] == '*':
board[i][y] = '.'
return board, x, y
elif board[i][y] == '#':
return board, x, y
elif board[x][y] == 'v':
for i in range(x + 1, H):
if board[i][y] == '*':
board[i][y] = '.'
return board, x, y
elif board[i][y] == '#':
return board, x, y
return board, x, y
T = int(input()) # ํ
์คํธ ์ผ์ด์ค ์
for test_case in range(1, T + 1):
H, W = map(int, input().split())
board = [list(input().strip()) for _ in range(H)]
N = int(input())
command = input().strip()
x, y = 0, 0
for i in range(H):
for j in range(W):
if board[i][j] == '^' or board[i][j] == 'v' or board[i][j] == '<' or board[i][j] == '>':
x, y = i, j # ์ ์ฐจ ํ์ฌ ์์น ์ ์ฅ
break
for i in command:
if i == 'U':
board, x, y = up(board, x, y)
elif i == 'D':
board, x, y = down(board, x, y)
elif i == 'L':
board, x, y = left(board, x, y)
elif i == 'R':
board, x, y = right(board, x, y)
elif i == 'S':
board, x, y = shoot(board, x, y)
print(f"#{test_case}", end=' ')
for i in board:
print(''.join(i))
๐ฉ๐ป ํ๊ณ
D3์ ์์๋งํ ๋์ด๋๋ ๋ง๋๋ฐ ์ฝํ ์ฐ์ต์ฉ์ผ๋ก ํ๊ธฐ์๋ ์ข์ ๋ฌธ์ ๋ ์๋ ๊ฒ ๊ฐ๋ค.. ์๊ฐ ๋ญ๋นํ๋ ๋๋
728x90
'๐งฉ Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SWEA] 4047. ์์ค์ด์ ์นด๋ ์นด์ดํ (Python/D3) (2) | 2024.11.14 |
|---|---|
| [SWEA] 3260. ๋ ์์ ๋ง์ (Python/D3) (1) | 2024.11.14 |
| [SWEA] 10580. ์ ๋ด๋ (Python/D3) (1) | 2024.11.13 |
| [SWEA] 6485. ์ผ์ฑ์์ ๋ฒ์ค ๋ ธ์ (Python/D3) (2) | 2024.11.13 |
| [SWEA] 5789. ํ์ฃผ์ ์์ ๋ฐ๊พธ๊ธฐ (Python/D3) (1) | 2024.11.13 |