728x90
테마
구현, 시뮬레이션
예상 소요시간
3~40분
아이디어
1. 주사위 배열 3*4 를 만든다. [1,1] 이 하늘은 보는 면. [3,1] 이 땅을 보는 면이다.
0x0
xxx
0x0
0x0
2. 방향을 1: 동 / 2: 서 / 3: 북 / 4: 남으로 정해 dx,dy 를 만든다. (이동)
3. 다음좌표가 (즉 굴린 후 지도 좌표) 유효하다면 다음을 실행한다.
굴리기 방법
(북으로 굴림)
010
234
050
060
현 주사위의 상태라 하면 북쪽으로 굴릴 경우 [n,1] 좌표가 한칸씩 위로 밀린다.
030
254
060
010
남쪽은 반대 방향과 같다.
(동으로 굴림)
010
234
050
060
현 주사위의 상태라 하면 북쪽으로 굴릴 경우 [2,n] 좌표가 한칸씩 동쪾으로 밀린다. 그리고 [3,1] 은 [2,0]으로 밀린다.
시계방향으로 순환한다 생각하면 편하다.
010
623
050
040
서쪽은 반시계 방향과 같다.
4. 굴렸다면 [1,1] 즉, 주사위가 하늘을 보는 윗면의 값을 출력한다.
5. 굴리기가 끝나면 지도의 값이 0인지 아닌지를 확인해 [3,1] 의 좌표로 적절히 변경하고 지도도 업데이트 한다.
6. 위를 반복수행한다.
코드
from sys import stdin
n, m, x, y, k = map(int, stdin.readline().split())
board = [list(map(int, stdin.readline().split())) for _ in range(n)]
commands = list(map(int, stdin.readline().split()))
answer = []
dice = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
dx = [0, 0, 0, -1, 1]
dy = [0, 1, -1, 0, 0]
def roll(command, board, dice, now_x, now_y):
nx = now_x + dx[command]
ny = now_y + dy[command]
if 0 <= nx < n and 0 <= ny < m:
if command == 1: # 동
dice[1][1], dice[1][2], dice[3][1], dice[1][0] = dice[1][0], dice[1][1], dice[1][2], dice[3][1]
print(dice[1][1])
elif command == 2: # 서
dice[1][0], dice[1][1], dice[1][2], dice[3][1] = dice[1][1], dice[1][2], dice[3][1], dice[1][0]
print(dice[1][1])
elif command == 3: # 북
dice[0][1], dice[1][1], dice[2][1], dice[3][1] = dice[1][1], dice[2][1], dice[3][1], dice[0][1]
print(dice[1][1])
elif command == 4: # 남
dice[0][1], dice[1][1], dice[2][1], dice[3][1] = dice[3][1], dice[0][1], dice[1][1], dice[2][1]
print(dice[1][1])
if board[nx][ny] == 0:
board[nx][ny] = dice[3][1]
else:
dice[3][1] = board[nx][ny]
board[nx][ny] = 0
return nx, ny
else:
return now_x, now_y
for i in range(k):
x, y = roll(commands[i], board, dice, x, y)
다른 문제 풀려다가 너무 어려워보여서 이걸로 도망쳤다. 이 정도 문제라면 집중력만 있다면 풀 수 있다.
구현 문제니까 구현하는 법만 상상 잘하면 풀린다. 사실 말이 쉽지
'프로그래밍 > programmers&bj' 카테고리의 다른 글
[python] 백준 14500번: 테트로미노 (0) | 2020.10.03 |
---|---|
[python] 백준 14501번: 퇴사 (0) | 2020.10.01 |
[python] codility: MaxCounters (0) | 2020.09.15 |
[python] 백준 1932번: 정수 삼각형 (0) | 2020.09.12 |
[python] 백준 18428번: 감시 피하기 (0) | 2020.09.09 |