백준_구현_주사위 굴리기_14499_파이썬

석준·2022년 8월 17일
0

백준_문제풀이

목록 보기
11/30
post-thumbnail

✅문제 요약

  1. NxM 지도 / r,c 로 지도 좌표를 나타냄
  2. 주사위 모양
        2
       4 1 3
         5
         6
  3. 지도의 각 칸에 정수가 쓰여져 있음
  4. 주사위를 굴렸을 때
    1. 칸에 쓰여있는 수가 0이면 주사위의 수를 칸에 복사
    2. 0이 아닌 칸인경우 칸에 씌여있는 수가 주사위에 복사 & 칸은 0으로 변경
  5. 주사위는 지도 밖으로 못나감(나가는 명령시 명령 무시)

✅문제 풀이

  1. 주사위 배열을 만들고, 인덱스 위치별 1-6 번호의 값을 넣어준다
  2. 2차원 배열을 돌 때, 주사위의 위치를 변경시켜가며 배열내에서 움직인다.
  3. 동서남북으로 움직였을때, 이전과 움직인 후 상하전후좌우 변경값을 직접 재 할당 해준다
import sys
input = sys.stdin.readline


n, m, x, y, k = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]
comm = list(map(int, input().split()))

dice = [0 for _ in range(7)]
direct = [0, (0, 1), (0, -1), (-1, 0), (1, 0)]


for i in comm:
    d = direct[i]
    nx, ny = x+d[0], y+d[1]
    if 0 <= nx < n and 0 <= ny < m:
        x, y = nx, ny

        if i == 1:
            dice[1], dice[4], dice[6], dice[3] = dice[4], dice[6], dice[3], dice[1]
        elif i == 2:
            dice[1], dice[4], dice[6], dice[3] = dice[3], dice[1], dice[4], dice[6]
        elif i == 3:
            dice[1], dice[5], dice[6], dice[2] = dice[5], dice[6], dice[2], dice[1]
        else:
            dice[1], dice[5], dice[6], dice[2] = dice[2], dice[1], dice[5], dice[6]

        if arr[x][y]==0:
            arr[x][y] = dice[6]
        else:
            dice[6] = arr[x][y]
            arr[x][y] = 0

        print(dice[1])

📌회고

주사위를 2차원 배열로 나타내려고 했으나 좌표 이동에서 빈번히 오류를 겪어 결국 위 방법을 사용했다.
내 코드가 pythonic하다고 생각은 들지 않아 아쉬움이 많이 남는 문제..
시간이 되면 다시 풀어봐야겠다

dice = [
	[0, 2, 0],
    [4, 1, 3],
    [0, 5, 0],
    [0, 6, 0]]

이런식으로 짰었는데 주사위 좌표와 변경되는 값을 할당하는게 자꾸 헷갈려서 일단 쉬운 방법으로 풀었다. 다시 이 문제를 만나면 다시 도전해야지

profile
파이썬 서버 개발자 지망생

0개의 댓글