728x90
삼성문제 특 )
그냥 빡구현
1,2,3,4 번이 동서남북이 아니라 동서북남이다!!!
+) 주사위는 지도의 바깥으로 이동시킬 수 없다.
만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안 된다
-> nx,ny를 구하고 지도를 벗어나는지 확인해주어야한다.
코드 :
# 동서북남
dx = [0,0,-1,1]
dy = [1,-1,0,0]
def move(dir) :
global x,y
nx,ny = x + dx[dir], y + dy[dir]
if 0<=nx<n and 0<=ny<m :
if dir == 0 : # 동
dice[0], dice[3], dice[5],dice[2] = dice[2],dice[0],dice[3],dice[5]
elif dir == 1 : # 서
dice[0], dice[2], dice[5],dice[3] = dice[3],dice[0],dice[2],dice[5]
elif dir == 2 : # 북
dice[0], dice[4], dice[5],dice[1] = dice[1],dice[0],dice[4],dice[5]
else : # 남
dice[0], dice[4], dice[5],dice[1] = dice[4],dice[5],dice[1],dice[0]
if mp[nx][ny] == 0 : # 칸에 있는 숫자가 0
mp[nx][ny] = dice[0] # 주사위 아랫면 숫자가 칸으로
else :
dice[0] = mp[nx][ny]
mp[nx][ny] = 0
x,y = nx,ny
print(dice[5]) # 윗면 출력
if __name__=="__main__" :
n,m,x,y,k = map(int,input().split())
mp = [list(map(int,input().split())) for i in range(n)]
order = list(map(int,input().split()))
dice = [0]*6
for o in order :
move(o-1) # 배열은 0 index, 주어지는 방향은 1 index
나는 설마 진짜로 하나하나 주사위 값을 바꿔줄지 생각못했다.
주사위는 0-index로 배열으로 만들어준다.
문제에 나와있는 숫자를 그대로 하되 0-index로 만들기 위해 1씩 빼주면 왼쪽의 그림처럼 생각할 수 있다.
이 주사위를 머릿속에서 왼쪽, 오른쪽, 위, 아래로 돌려서 어디에 있는 값이 어디로 가면 되는 지 생각해주면 된다.
이렇게 하나하나 차분히 생각하면 된다.
이를 코드로 만들어주면 끝-!
동서남북으로 주사위를 돌린 형태를 그려주면?
복습하면서 만든 코드 :
# 동 서 북 남
dx = [0,0,-1,1]
dy = [1,-1,0,0]
if __name__=="__main__" :
dice = [0]*6
n,m,x,y,k = map(int,input().split())
mp = [list(map(int,input().split())) for _ in range(n)]
order = list(map(int,input().split()))
for dir in order :
nx,ny = x + dx[dir-1] , y + dy[dir-1]
# 만약 이 범위를 벗어나면 -> 무시
if 0<=nx< n and 0<=ny<m :
if dir == 1 :
dice[2],dice[0],dice[3],dice[5] = dice[5],dice[2],dice[0],dice[3]
elif dir == 2 :
dice[3],dice[0],dice[2],dice[5] = dice[5],dice[3],dice[0],dice[2]
elif dir == 4 :
dice[5],dice[4],dice[0],dice[1] = dice[1],dice[5],dice[4],dice[0]
elif dir == 3 :
dice[0],dice[4],dice[5],dice[1] = dice[1],dice[0],dice[4],dice[5]
if mp[nx][ny] == 0 :
mp[nx][ny] = dice[0]
else :
dice[0] = mp[nx][ny]
mp[nx][ny] = 0
x,y = nx,ny
print(dice[5])
참고 블로그 :
https://chldkato.tistory.com/160
백준 14499 주사위 굴리기 (파이썬)
https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개..
chldkato.tistory.com
복습 :
✅ 20220714
✅ 20220913
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[삼성SW역량][Python/BOJ] 백준 14890 경사로(구현) (0) | 2022.07.14 |
---|---|
[삼성SW역량][Python/BOJ] 백준 15685 드래곤커브(시뮬레이션) (0) | 2022.07.13 |
[삼성SW역량][Python/BOJ] 백준 3190 뱀(시뮬레이션) (0) | 2022.07.12 |
[삼성SW역량][Python/BOJ] 백준 15686 치킨 배달(DFS) (0) | 2022.07.11 |
[삼성SW역량][Python/BOJ] 백준 14891 톱니바퀴(시뮬레이션) (0) | 2022.07.11 |