반응형
문제 해결
1. 회전방향에 따라 주사위의 숫자위치 변화를 잘 이해해야 한다.
(1) 먼저 지도 위에서 주사위를 방향에 맞게 움직여주고
(2) 움직임에 맞게 주사위의 면에 써진 숫자들의 위치를 변경해준다.
(3) 바뀐 숫자들과 지도에 써진 숫자를 비교하여 바꿔준다.
- > 회전시킨 주사위 면의 변화를 잘 몰라서 그림판에 그려가며 하드코딩 했다.........(어쩔 수 없었다)
소스코드
def move(i, j, direc):
global x, y
if direc == 1: # 동
if j + 1 < m:
y = j + 1
elif direc == 2: # 서
if j - 1 >= 0:
y = j - 1
elif direc == 3: # 북
if i - 1 >= 0:
x = i - 1
elif direc == 4: # 남
if i + 1 < n:
x = i + 1
if i != x or j != y:
return True
return False
def rotation(direc):
if direc == 1: # 동
dice[1][0], dice[1][1], dice[1][2], dice[3][1] = dice[3][1], dice[1][0], dice[1][1], dice[1][2]
elif direc == 2: # 서
dice[1][0], dice[1][1], dice[1][2], dice[3][1] = dice[1][1], dice[1][2], dice[3][1], dice[1][0]
elif direc == 3: # 북
dice[0][1], dice[1][1], dice[2][1], dice[3][1] = dice[1][1], dice[2][1], dice[3][1], dice[0][1]
elif direc == 4: # 남
dice[0][1], dice[1][1], dice[2][1], dice[3][1] = dice[3][1], dice[0][1], dice[1][1], dice[2][1]
def change_number():
# print('xy', x, y)
if field[x][y] == 0:
field[x][y] = dice[3][1]
else:
dice[3][1] = field[x][y]
field[x][y] = 0
print(dice[1][1])
n, m, x, y, k = map(int, input().split()) # 세로 가로 엑스 와이 명령갯수
field = [list(map(int, input().split())) for _ in range(n)]
orders = list(map(int, input().split()))
# 1, 2, 3, 4 : 동 서 북 남
dice = [[0]*3 for _ in range(4)]
for order in range(len(orders)):
if move(x, y, orders[order]):
rotation(orders[order])
change_number()
출처 : BACKJOON ONLINE JUDGE
문제 : https://www.acmicpc.net/problem/14499
반응형
'Algorithm Problem > Python' 카테고리의 다른 글
[python] 백준 - 2644. 촌수계산 (0) | 2020.05.21 |
---|---|
[python] 백준 - 17142. 연구소 3 (삼성 SW 역량 테스트 기출 문제) (0) | 2020.05.20 |
[python] 백준 - 17144. 미세먼지 안녕!(삼성 SW 역량 테스트 기출 문제) (2) | 2020.05.18 |
[python] 백준 - 1987. 알파벳 (0) | 2020.05.15 |
[python] 백준 - 14890. 경사로(삼성 SW 역량 테스트 기출 문제) (0) | 2020.05.14 |