https://www.acmicpc.net/problem/14499
시뮬레이션 문제이다.
키 포인트는
- 주사위 전개도를 배열로 치환하기
- 문자열 slicing으로 동서남북 이동 결과 리턴
주의할 점은 최초 입력값 받을 때 x,y가 아닌 y,x로 입력을 받아야 한다.
def east(dice):
return list(str(dice[0])+str(dice[5])+str(dice[2])+str(dice[4])+str(dice[1])+str(dice[3]))
def west(dice):
return list(str(dice[0])+str(dice[4])+str(dice[2])+str(dice[5])+str(dice[3])+str(dice[1]))
def north(dice):
return list(''.join(dice[3])+''.join(dice[:3])+''.join(dice[4:]))
def south(dice):
return list(''.join(dice[1:4])+''.join(dice[0])+''.join(dice[4:]))
def main():
N, M, y, x, K = map(int, input().split())
MAP = [input().split() for _ in range(N)]
cmd = input().split()
di = ((0,1),(0,-1),(-1,0),(1,0))
dice = ['0']*6
dice[1] = MAP[y][x]
for c in cmd:
next_y = y + di[int(c)-1][0]
next_x = x + di[int(c)-1][1]
if 0<=next_y<N and 0<=next_x<M:
if c == "1":
dice = east(dice)
elif c == "2":
dice = west(dice)
elif c == "3":
dice = north(dice)
else:
dice = south(dice)
if MAP[next_y][next_x] == "0":
MAP[next_y][next_x] = dice[1]
else:
dice[1] = MAP[next_y][next_x]
MAP[next_y][next_x] = "0"
print(dice[3])
y = next_y
x = next_x
else:
continue
main()
문제를 푸는데 도움이 된 테스트 케이스
# Input 4 2 1 0 8 0 2 3 4 5 6 7 8 4 4 4 1 3 3 3 2 # Output 0 3 0 0 8 6 3 |
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[Python] 14503. 로봇 청소기 (0) | 2021.04.14 |
---|---|
[Python] 15686. 치킨 배달 (0) | 2021.04.08 |
[Python] 13458. 시험 감독 (0) | 2021.04.04 |
[Python] 3190. 뱀 (0) | 2021.04.03 |
[Python]3678. 카탄의 개척자 (0) | 2019.05.11 |
댓글