소스 코드
def move(items):
for w in range(3):
dice[items[2*w]], dice[items[2*w+1]] = dice[items[2*w+1]], dice[items[2*w]]
return
# 0 동 서 북 남
# dir의 값이랑 맞추기 위해 앞에 0 추가
x = [0,0,0,-1,1]
y = [0,1,-1,0,0]
# n,m,i,j,k
n,m,i,j,k = map(int,input().split())
board = [list(map(int,input().split())) for _ in range(n)]
# 방향들 저장
dir = list(map(int,input().split()))
# 초기 주사위 값
dice = [0,0,0,0,0,0]
# 주사위 위치
dice_idx = [i,j]
for q in dir:
ni = dice_idx[0]+x[q]
nj = dice_idx[1]+y[q]
# 범위 안에 있으면
if 0 <= ni < n and 0 <= nj < m:
# 주사위 위치 갱신
dice_idx = [ni,nj]
# 굴리는 방향에 따라 주사위 값 갱신하기
if q == 1:
move([0,1,0,2,2,3])
elif q == 2:
move([0,1,1,2,1,3])
elif q == 3:
move([1,4,2,5,1,2])
else:
move([1,4,2,5,4,5])
# 바닥의 값에 따라 바닥, 주사위 밑 면 갱신
if board[ni][nj] == 0:
board[ni][nj] = dice[2]
else:
dice[2] = board[ni][nj]
board[ni][nj] = 0
print(dice[1])
해결 방법
1. 상 하 좌 우 방향에 따라 주사위의 각 면이 어느 방향에서 보이는지 확인한다
ex)
2(앞) | ||
4(왼) | 1(위) | 3(오) |
5(아래) | ||
6(바닥) |
를 [4,1,6,3,2,5] 형태로 작성한다.
-> 오른쪽으로 굴릴 경우
2(앞) | ||
6(왼) | 4(위) | 1(오) |
5(아래) | ||
3(바닥) |
[6,4,3,1,2,5]의 형태로 바뀐다.
2. 이처럼 굴리는 방향에 따라서 다르게 변경됨
3. 변경되는 규칙을 작성한 후, 다른 조건을 적용하면 됨
느낀 점
사실 이렇게 푸는 것이 문제 제출자의 의도인지는 모르겠다...
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.백준' 카테고리의 다른 글
[BOJ/백준 코딩] 부분수열의 합 - PYTHON #1182 (0) | 2021.10.06 |
---|---|
[BOJ/백준 코딩] 인구 이동 - PYTHON #16234 (0) | 2021.02.27 |
[BOJ/백준 코딩] 톱니바퀴 - PYTHON #14891 (0) | 2021.02.25 |
[BOJ/백준 코딩] 연산자 끼워넣기 - PYTHON #14888 (0) | 2021.02.24 |
[BOJ/백준 코딩] 컨베이어 벨트 위의 로봇 - PYTHON #20055 (0) | 2021.02.23 |