'삼성 SW 역량 테스트' 기출 문제 입니다. 😀
문제 👉 14499번: 주사위 굴리기
1. 문제
- 크기가 N*M인 지도와 북쪽으로 r만큼, 서쪽으로 c만큼 떨어진 (r,c) 위치에 주사위가 존재한다.
- 지도의 각 칸에는 정수가 하나씩 쓰여져 있다.
- 초기 주사위는 모든 면이 0이다.
- 주사위를 굴렸을 때
- 지도의 바닥면 == 0: 지도의 바닥면 = 주사위의 바닥면
- 지도의 바닥면 != 0: 주사위의 바닥면 = 지도의 바닥면
- 주사위의 명령은 동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4로 주어진다.
- 주사위를 이동할 때 마다 주사위의 윗 면에 쓰여진 수를 출력한다.
2. 풀이
시뮬레이션
을 이용한 문제 풀이
- 주사위가 돌아가는 함수 구현한다.
(손으로 그려보면서 하면 금방 할 수 있다. 머리로만 하지말자...)
3. 코드
def solution():
N, M, x, y, K = map(int, input().split())
B = [list(map(int, input().split())) for _ in range(N)] # 지도
C = list( input().split()) # 명령
D = {'1':(0,1), '2':(0,-1), '3':(-1,0), '4':(1,0)} # 동서북남
Dice = [0]*6 # 0:하(-z), 1:상(+z), 2:동(+x), 3:서(-x), 4:남(-y), 5:북(y)
def rotate(r): #주사위 돌아가는 함수
if r == '1': # 동
Dice[0],Dice[1],Dice[2],Dice[3],Dice[4],Dice[5] = Dice[2],Dice[3],Dice[1],Dice[0],Dice[4],Dice[5]
if r == '2': # 서
Dice[0],Dice[1],Dice[2],Dice[3],Dice[4],Dice[5] = Dice[3],Dice[2],Dice[0],Dice[1],Dice[4],Dice[5]
if r == '3': # 북
Dice[0],Dice[1],Dice[2],Dice[3],Dice[4],Dice[5] = Dice[5],Dice[4],Dice[2],Dice[3],Dice[0],Dice[1]
if r == '4': # 남
Dice[0],Dice[1],Dice[2],Dice[3],Dice[4],Dice[5] = Dice[4],Dice[5],Dice[2],Dice[3],Dice[1],Dice[0]
for i in range(K):
x += D[C[i]][0]
y += D[C[i]][1]
if x < 0 or x >= N or y < 0 or y >= M:
x -= D[C[i]][0]
y -= D[C[i]][1]
continue
rotate(C[i])
if B[x][y] == 0:
B[x][y] = Dice[0]
else:
Dice[0] = B[x][y]
B[x][y] = 0
print(Dice[1])
return
solution()
- 결과는 72 ms 나왔다.
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > BOJ' 카테고리의 다른 글
[백준] 14501 - 퇴사 [Python(파이썬)] (0) | 2021.11.22 |
---|---|
[백준] 13458 - 시험 감독 [Python(파이썬)] (0) | 2021.11.22 |
[백준] 3190 - 뱀 [Python(파이썬)] (0) | 2021.11.22 |
댓글