BOJ - 14499 - 주사위 굴리기
문제
https://www.acmicpc.net/problem/14499
풀이
아이디어
딱히 머리 쓸 거 없이, 열심히 구현을 하자. 예제를 노트에 따라가려닌까 오히려 머리 아프다. 일단 문제에 설명된 기능을 다 구현해보고 실행해본 뒤에 문제가 있다면 그 때 디버깅하는게 편하더라.
함수를 분리해서 구현하는 것이 디버깅도 편하고 구현도 편하다.
Dice 라는 클래스를 만든 뒤 메서드로 change, devchange, move를 만든다.
각각의 기능은
change : 주사위의 현재 위치를 받아 Map의 바닥과 주사위의 바닥을 바꾸는 메서드
devchange : 주사위가 움직인 (구른) 방향을 받아 전개도를 바꿔주는 메서드
move : 방향을 받으면 주사위 위치를 움직여주고 (경계 확인) 위 두 메서드를 실행시킨 뒤 주사위 윗 면의 숫자를 출력한다.
구현
class Dice:
def __init__(self,N,M,x,y,Map):
self.boundary = (N,M)
self.x = x
self.y = y
self.Map = Map
'''
1
3 0 2
4
5
'''
self.dev = [0,0,0,0,0,0]
Dice 위치, 맵, 전개도 dev를 속성으로 가지자.
전개도 바닥은 dev[-1] 상단은 dev[0]이 된다.
def change(self,x,y):
if self.Map[x][y]:
self.dev[-1] = self.Map[x][y]
self.Map[x][y] = 0
else:
self.Map[x][y] = self.dev[-1]
change 메서드, 문제의 조건에 맞게 Map과 전개도 바닥의 숫자를 바꾸거나 전개도 바닥의 숫자를 Map에 옮겨쓴다.
def devch(self,dir):
tmp = self.dev[:]
if dir == 0:
self.dev = [tmp[4],tmp[0],tmp[2],tmp[3],tmp[5],tmp[1]]
elif dir == 2:
self.dev = [tmp[1], tmp[5], tmp[2], tmp[3], tmp[0], tmp[4]]
elif dir == 1:
self.dev = [tmp[2], tmp[1], tmp[5], tmp[0], tmp[4], tmp[3]]
elif dir == 3:
self.dev = [tmp[3], tmp[1], tmp[0], tmp[5], tmp[4], tmp[2]]
dev change 메서드 경우가 몇개 없어서 그냥 직접 썼다.
해당 방향으로 주사위가 굴렀을 때 전개도가 어떻게 바뀌는지 구현한 것
def move(self,dir):
dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]
nx = self.x + dx[dir]
ny = self.y + dy[dir]
if (self.boundary[0] > nx >= 0 and self.boundary[1] > ny >= 0):
self.x = nx
self.y = ny
self.devch(dir)
self.change(nx,ny)
print(self.dev[0])
move 함수, 경계 안이면 좌표를 이동하고 뒤집어 주고 (devch) 바닥이랑 바꿔주고 (change) 출력
N, M, x, y, K = map(int,readline().split())
Map = [list(map(int,readline().split())) for _ in range(N)]
order = list(map(int,readline().split()))
dir_dict = {4:2, 3:0, 2:1, 1:3}
dice = Dice(N,M,x,y,Map)
for i in order:
dice.move(dir_dict[i])
main 함수, 인풋 받고, 방향 내 입맛대로 재설정하고 order 순서대로 굴려주면 끄읕
결과
딱 이정도 난이도의 구현 문제는 푸는게 너무 재밌더라. ㅎㅅㅎ;;
Author And Source
이 문제에 관하여(BOJ - 14499 - 주사위 굴리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeukoh26/BOJ-14499-주사위-굴리기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)