본문 바로가기
취준! ✒/삼성

[코테준비] 5. 백준- 주사위 굴리기(14499) python "삼성 SW 역량 테스트 기출 문제"

by deepbluechip 2023. 9. 16.
728x90

주사위 굴리기

  • 링크:https://www.acmicpc.net/problem/14499
  • 난이도:골드4
  • 분류: 구현, 시뮬레이션
  • 직접 푼 여부: △ (요즘 시간이 없어서 그냥 바로 풀이를 보며 풀고 있다. 하지만, 코드는 보지 않고 풀었다)
  • 언어: 파이썬

풀이 노트

아래 사진처럼, 주사위를 굴리면 어디가 어떻게 변하는지 생각해보고 구현하였다. 

 

!!주의사항!!

이런 2차원 행렬을 이용할 때 주의해야할 것이 있다.

  1. 평소에 우리는 x,y좌표로 생각을 하지만, 2차원 행렬에서는 행,렬 순 즉 y, x순이다. 그래서 값을 받을 때도 y, x로 받아야하고, 사용할 때도 array[y][x]로 해야한다. 그래서 row, column을 의미하는 r,c를 사용하기도 하는데 둘다 어느정도 헷갈릴만한 사항이 있기에 주의하자. 나는 값 받아올 때 x,y순으로 받아와서 계속 틀렸다 ㅜㅜ 예제들은 그게 틀려도 맞더라..
  2. 그리고 x축은 우리가 아는 것처럼 오른쪽으로 갈수록 증가하지만, y축은 내려갈 때 값이 증가하는 것을 꼭 생각해야한다. 
  3. 동서남북 순이아니라 동서북남 순이다! 주의!

코드

import sys
input = sys.stdin.readline

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

# 좌표 움직임 - 동서북남 (우왼하상)
dx = [1,-1,0,0]
dy = [0,0,-1,1]

# 주사위 기본 (현재)
east, west, south, north, top , bottom = 0,0,0,0,0,0

for op in operations:
    # 주사위 위치
    nx = x+dx[op-1]
    ny = y +dy[op-1]
    teast, twest, tsouth, tnorth, ttop , tbottom =east, west, south, north, top , bottom
    if not(0<=nx<m) or not(0<=ny<n):
        # 범위 벗어나면, 그냥 다음 operation
        continue
    # 아니면, 해당위치로 이동
    x, y = nx, ny
    #주사위 굴리기
    if op ==1:
        # 동
        east, west, top , bottom =  tbottom, ttop, teast, twest
    elif op ==2:
        # 서
        east, west, top , bottom =ttop, tbottom, twest, teast
    elif op ==3:
        #북
        south, north, top , bottom = ttop, tbottom, tnorth, tsouth
    else:
        #남
        south, north, top , bottom = tbottom, ttop, tsouth, tnorth
        
    
    if mapp[ny][nx] ==0:
        #칸이 0이면, 주사위 바닥 면 복사붙여넣기
        mapp[ny][nx] =bottom
    else:
        #칸에 써있으면, 칸 수가 주사위바닥에 복사됨 & 칸은 0이 됨
        bottom = mapp[ny][nx]
        mapp[ny][nx] =0
        
    print(top)

 

 

728x90