Notice
Recent Posts
Recent Comments
Link
코딩 공부
[Python](시뮬) 백준 14499번 : 주사위 굴리기 본문
728x90
<접근 방법>
- 삼차원 주사위를 굴린다고 생각하니 너무 어렵게 느껴져 전개도로 접근해봐야겠다.
- 동서남북마다 주사위의 상태를 정리하여 전개도를 그려본다.
3. 각 명령의 순서대로 주사위를 이동시키고, 범위에서 벗어나지 않을 경우에만 주사위의 좌표, 전개도를 바꾸고(change 함수 이용) 상황에 맞춰 바닥면 및 주사위면을 복사시키고, 주사위의 윗면을 출력한다.
def change(d): # 주사위 전개도 변경
if d == 1:
dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
elif d == 2:
dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
elif d == 3:
dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]
elif d == 4:
dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]
N, M, x, y, K = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
order = list(map(int, input().split()))
dice = [0, 0, 0, 0, 0, 0, 0] # 처음 주사위는 모든 면이 0
directions = {1:(0, 1), 2:(0, -1), 3:(-1, 0), 4:(1, 0)} # 동서북남
for d in order:
nx = x + directions[d][0]
ny = y + directions[d][1]
if 0<=nx<N and 0<=ny<M: # 범위 내에서 이동할 때만 출력함
x, y = nx, ny
change(d)
if board[x][y] == 0: # 바닥면이 0일 경우
board[x][y] = dice[6] # 주사위 숫자를 바닥으로 복사
else: # 바닥면이 0이 아닌 경우
dice[6] = board[x][y] # 바닥면의 숫자를 주사위면으로 복사
board[x][y] = 0 # 바닥면은 0으로
print(dice[1]) # 주사위 윗면 출력
이해가 되지 않는 부분이 있으면 질문 주세요. 감사합니다.
728x90
'삼성 SW 역량 테스트 기출 문제' 카테고리의 다른 글
[Python](BFS&DFS / BFS&Itertools) 백준 14502번 : 연구소 (2가지 방법) (2) | 2024.02.05 |
---|---|
[Python](DFS) 백준 14500번 : 테트로미노(2가지 방법) (0) | 2024.02.04 |
[Python](시뮬) 백준 3190번 : 뱀 (2) | 2024.01.30 |
[Python](시뮬) 백준 21610번 : 마법사 상어와 비바라기 (2) | 2024.01.29 |
[Python](시뮬) 백준 21608번 : 상어 초등학교 (2) | 2024.01.28 |