Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 구현
- SWEA
- docker
- 자료구조 및 실습
- 실전알고리즘
- 2단계
- 1단계
- cs
- 3단계
- ubuntu
- CS231n
- 머신러닝
- 백준
- ssd
- 그리디
- MySQL
- C++
- 코드수행
- 전산기초
- AWS
- Object detection
- test-helper
- 프로그래머스
- pytorch
- 모두를 위한 딥러닝 강좌 시즌1
- Python
- STL
- 파이썬
- 딥러닝
- 이것이 코딩테스트다 with 파이썬
Archives
- Today
- Total
곰퓨타의 SW 이야기
[백준 14499번 주사위굴리기] 경우의 수 차근차근 따지기 본문
해결해야하는 문제는 다음과 같았다.
14499번: 주사위 굴리기
첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도
www.acmicpc.net
최근에 보았던 '이것은 코딩테스트다. 파이썬편;에서 동서남북 이동시 dx, dy를 사용했다는 것을 활용하여 다음과 같이 접근하였다.
import sys
input = sys.stdin.readline
n,m,x,y,k = map(int,input().split())
game = []
for i in range(n):
game.append(list(map(int,input().split())))
command = list(map(int,input().split()))
# 동, 서, 바닥, 위, 앞, 뒤
map_dice = [0,0,0,0,0,0]
# 남, 동, 서, 북 (4로 나눈 나머지가 0인 경우가 남)
dx = (1,0,0,-1)
dy = (0,1,-1,0)
def dice_face_change(num,old_dice) :
new_dice = [0 for _ in range(6)]
# 남
if num == 0:
new_dice[0] = old_dice[0]
new_dice[1] = old_dice[1]
new_dice[2] = old_dice[4]
new_dice[3] = old_dice[5]
new_dice[4] = old_dice[3]
new_dice[5] = old_dice[2]
# 동
elif num == 1 :
new_dice[0] = old_dice[3]
new_dice[1] = old_dice[2]
new_dice[2] = old_dice[0]
new_dice[3] = old_dice[1]
new_dice[4] = old_dice[4]
new_dice[5] = old_dice[5]
# 서
elif num == 2:
new_dice[0] = old_dice[2]
new_dice[1] = old_dice[3]
new_dice[2] = old_dice[1]
new_dice[3] = old_dice[0]
new_dice[4] = old_dice[4]
new_dice[5] = old_dice[5]
# 북
else :
new_dice[0] = old_dice[0]
new_dice[1] = old_dice[1]
new_dice[2] = old_dice[5]
new_dice[3] = old_dice[4]
new_dice[4] = old_dice[2]
new_dice[5] = old_dice[3]
return new_dice
for i in range(k) :
pos_x = x+dx[command[i]%4]
pos_y = y+dy[command[i]%4]
if pos_x > n-1 or pos_y > m-1 or pos_x < 0 or pos_y < 0:
continue
# 주사위면 바꾸기
map_dice = dice_face_change(command[i]%4, map_dice)
# 윗면 출력
print(map_dice[3])
if game[pos_x][pos_y] == 0:
game[pos_x][pos_y] = map_dice[2]
else :
map_dice[2] = game[pos_x][pos_y]
game[pos_x][pos_y] = 0
# 좌표 업데이트
x = pos_x
y = pos_y
'TIL > 백준' 카테고리의 다른 글
[백준 13458번 시험감독] if,for 의 활용 (0) | 2021.04.24 |
---|---|
[백준 12100 2048(easy)] 하나하나 차근차근 풀어보기,, (0) | 2021.04.24 |
[백준 5585 거스름돈] 그리디 알고리즘 활용하기 (0) | 2021.04.15 |
[백준 1759 암호 만들기] 조건 주의하기 (0) | 2021.04.15 |
[백준 1929 소수 구하기] set 함수 주의 (0) | 2021.04.15 |
Comments