1. 문제
2. 접근 방법
주사위를 돌렸을 때 생각해내는게 어려웠습니다.
초기 상태는 바닥이 1이고 위쪽이 6인데,
계속 바닥이 1이라고 했을 때 그 값에 들어갈 것은
위로 주사위를 굴릴 경우 2에 위치한 값,
아래로 주사위를 굴릴 경우 5에 위치한 값,
우측으로 주사위를 굴릴 경우 3에 위치한 값,
좌측으로 주사위를 굴릴 경우 4에 위치한 값
입니다.
이렇게 생각해야 바닥은 계속해서 1이고, 위쪽은 6이 됩니다.
이 개념만 가지고 간다면 전혀 문제 될 것이 없다 ..!
그래서 이번 문제는 함수를 3개 만들었습니다.
1. 주사위를 굴리는 함수: rotate
2. board위에서 주사위가 이동하는 것: move
3. board의 영역을 벗어났는지 확인하는 것: isWall (벽이냐 아니냐 요런 느낌인데, 그냥 길이아니냐 라는 느낌으로다가 쓴 것임다)
3. 코드
python
def isWall(x, y):
if x < 0 or x >= M or y < 0 or y >= N:
return True
return False
def move():
global dirs
dir = dirs[0]
if dir == 1:
return (1, 0)
elif dir == 2:
return (-1, 0)
elif dir == 3:
return (0, -1)
elif dir == 4:
return (0, 1)
def rotate():
global dirs, nx, ny
while dirs:
dx, dy = move()
tx = nx + dx
ty = ny + dy
if not isWall(tx, ty):
if (dx, dy) == (1, 0):
dice[1], dice[3], dice[6], dice[4] = dice[3], dice[6], dice[4], dice[1]
elif (dx, dy) == (-1, 0):
dice[1], dice[3], dice[6], dice[4] = dice[4], dice[1], dice[3], dice[6]
elif (dx, dy) == (0, 1):
dice[1], dice[2], dice[6], dice[5] = dice[5], dice[1], dice[2], dice[6]
elif (dx, dy) == (0, -1):
dice[1], dice[2], dice[6], dice[5] = dice[2], dice[6], dice[5], dice[1]
if board[ty][tx] == 0:
board[ty][tx] = dice[1]
else:
dice[1] = board[ty][tx]
board[ty][tx] = 0
nx, ny = tx, ty
ans.append(dice[6])
dirs.pop(0)
N, M, sy, sx, K = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
dirs = list(map(int, input().split()))
dice = [0] * 7
nx, ny = sy, sx
ans = []
rotate()
print(*ans, sep="\n")
4. 마치며
한 번은 맞왜틀을 외쳤었는데여
그 이유는
하하하
x는 행이고 y가 열이었습니다.
하하하
하필 테스트케이스로 주어진 친구들이 모두 x, y좌표가 동일했기 때문에 테스트케이스에서는 문제가 없었습니다 ㅠ
어쩐지 채점을 시작하자마자 틀리더라구욧~!
눙물 주르륵
문제를 더욱 꼼꼼히 읽읍시다
'Algorithm > Python' 카테고리의 다른 글
[백준 17136] 색종이 붙이기 (0) | 2021.04.17 |
---|---|
[백준 14500] 테트로미노 (0) | 2021.04.16 |
[백준 12100] 2048(Easy) (0) | 2021.04.15 |
[백준 13460] 구슬 탈출2 (0) | 2021.04.15 |
[백준 1580] 위치 바꾸기 (0) | 2021.04.14 |