728x90
주사위 굴리기
- 링크:https://www.acmicpc.net/problem/14499
- 난이도:골드4
- 분류: 구현, 시뮬레이션
- 직접 푼 여부: △ (요즘 시간이 없어서 그냥 바로 풀이를 보며 풀고 있다. 하지만, 코드는 보지 않고 풀었다)
- 언어: 파이썬
풀이 노트
아래 사진처럼, 주사위를 굴리면 어디가 어떻게 변하는지 생각해보고 구현하였다.
!!주의사항!!
이런 2차원 행렬을 이용할 때 주의해야할 것이 있다.
- 평소에 우리는 x,y좌표로 생각을 하지만, 2차원 행렬에서는 행,렬 순 즉 y, x순이다. 그래서 값을 받을 때도 y, x로 받아야하고, 사용할 때도 array[y][x]로 해야한다. 그래서 row, column을 의미하는 r,c를 사용하기도 하는데 둘다 어느정도 헷갈릴만한 사항이 있기에 주의하자. 나는 값 받아올 때 x,y순으로 받아와서 계속 틀렸다 ㅜㅜ 예제들은 그게 틀려도 맞더라..
- 그리고 x축은 우리가 아는 것처럼 오른쪽으로 갈수록 증가하지만, y축은 내려갈 때 값이 증가하는 것을 꼭 생각해야한다.
- 동서남북 순이아니라 동서북남 순이다! 주의!
코드
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
'취준! ✒ > 삼성' 카테고리의 다른 글
[코테준비] 7. 백준- 나무 재테크(16235) python "삼성 SW 역량 테스트 기출 문제" (2) | 2023.09.20 |
---|---|
[코테준비] 6. 백준- 경사로(14890) python "삼성 SW 역량 테스트 기출 문제" (0) | 2023.09.17 |
[코테준비] 4. 백준- 시험 감독(13458) python "삼성 SW 역량 테스트 기출 문제" (0) | 2023.09.13 |
[코테준비] 3. 백준- 연산자 끼워넣기(14888) python "삼성 SW 역량 테스트 기출 문제" (0) | 2023.09.12 |
[코테준비]2. 백준- 스타트와 링크(14889) python "삼성 SW 역량 테스트 기출 문제" (0) | 2023.09.11 |