알고리즘/백준 [백준 14499] 주사위 굴리기 최성훈 2019. 9. 25. 20:00 반응형 문제 보기풀이풀이 이 문제는 단순구현 문제이다.단지 주사위를 굴렸을 때 어떻게 주사위의 각 면들을 구할 것인지, 지도와 주사위의 밑바닥 값을 어떻게 복사할 지 주의하면 된다.첫번째로, 주사위를 상하좌우로 굴려서 면이 바뀌었을 때, 이를 업데이트 하는 방법은 다음과 같다.주사위의 전개도에서 각 위치들을 절대적인 위치로 생각하고, 주사위를 굴렸을 때 바뀐 면들을 업데이트 한다.이를 구현하면 아래와 같다. (전개도는 절대적인 명시되있는 것처럼 절대적인 위치라고 생각한다.)두번째로, 주사위를 굴릴 다음 위치가 지도에 없으면, 해당 움직임은 무시 해야한다.만약 주사위를 성공적으로 굴렸다면, 문제에서 지시하는대로 값을 복사하면 된다. 풀이코드코드 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455import sys n, m, r, c, k = map(int, sys.stdin.readline().split())board = [list(map(int, sys.stdin.readline().split())) for r in range(n)]move_list = list(map(int, sys.stdin.readline().split()))dice = [0, 0, 0, 0, 0, 0] def roll(dice, direction): if direction == 1: temp = dice[5] dice[5] = dice[3] dice[2:4] = dice[1:3] dice[1] = temp elif direction == 2: temp = dice[5] dice[5] = dice[1] dice[1:3] = dice[2:4] dice[3] = temp elif direction == 3: temp = dice[0] dice[0] = dice[2] dice[2] = dice[4] dice[4] = dice[5] dice[5] = temp elif direction == 4: temp = dice[5] dice[5] = dice[4] dice[4] = dice[2] dice[2] = dice[0] dice[0] = temp # return top and bottom of the dice return dice[2], dice[5] directions = ((), (0, 1), (0, -1), (-1, 0), (1, 0))cur = (r, c)for move in move_list: next_r = cur[0] + directions[move][0] next_c = cur[1] + directions[move][1] # skip this movement if next_r < 0 or next_r >= n or next_c < 0 or next_c >= m: continue # roll the dice roll(dice, move) if board[next_r][next_c] == 0: board[next_r][next_c] = dice[5] else: dice[5] = board[next_r][next_c] board[next_r][next_c] = 0 print(dice[2]) cur = (next_r, next_c) Colored by Color Scriptercs 코드 반응형 저작자표시 (새창열림)