코드트리 챌린지
[코드트리] 작은 구슬의 이동 / 시뮬레이션, dxdy 테크닉
우당탕탕코딩일기
2023. 10. 6. 15:32
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
작은 구슬의 이동
1개의 구슬이 n*n 격자 안에 놓여져 있고, 격자는 벽으로 둘러싸여 있습니다. 이 구슬은 방향을 갖고 있고, 해당 방향으로 1초에 한칸 씩 움직입니다.
구슬이 벽에 부딪히면 움직이는 방향이 반대로 뒤집혀 동일한 속도로 움직이는 것을 반복합니다. 이때 방향을 바꾸는 데에는 시간이 1만큼 소요됩니다.구슬의 처음 위치와 초기 방향이 주어졌을 때, t초가 지난 이후에 해당 구슬의 위치를 구하는 프로그램을 작성해보세요.
입력 형식
첫 번째 줄에는 격자의 크기를 나타내는 n과 시간 t가 공백을 사이에 두고 주어집니다.
두 번째 줄에는 구슬 정보 (r, c, d)가 공백을 사이에 두고 주어집니다. 현재 구슬이 r행 c열에 놓여 있으며, d방향을 바라보고 있음을 뜻합니다. d는 위 아래 오른쪽 왼쪽을 의미하는 ‘U', ‘D’, ‘R’, 'L’ 4개의 문자 중 하나가 주어집니다. (1 ≤ r ≤ n, 1 ≤ c ≤ n)
- 2 ≤ n ≤ 50
- 1 ≤ t ≤ 100
출력 형식
t초 후 구슬의 위치가 r행 c열이라 했을 때 r, c 값을 공백을 사이에 두고 출력합니다.
입출력 예제
예제1
입력:
4 4
1 2 L
출력:
1 3
코드
#n은 격자의 크기 t는 시간
n, t = tuple(map(int, input().split()))
#오 , 아, 위, 왼
drs, dcs = [0,1,-1,0], [1,0,0,-1]
## d: 현재 보고있는 방향
r, c, d = list(input().split())
# L : 왼 // R: 오른 // U: 위 // D: 아래
# 반대방향으로 이동하므로 3 <-> 0 / 1<->2
mapper = {
'R' : 0,
'D' : 1,
'U' : 2,
'L' : 3,
}
## 현재 구슬 위치 r행 c열
r = int(r)-1
c = int(c)-1
def in_range(x, y):
return 0 <= x and x<n and y<n and 0<= y
for i in range(t):
# 한칸 해당 방향으로 이동
nr, nc = r+drs[mapper[d]], c + dcs[mapper[d]]
#만약 범위 안에 존재
if in_range(nr,nc ):
#그대로 가기
r, c = nr, nc
else:
#아니면 방향 바꾸기
mapper[d] = 3-mapper[d]
print(r+1, c+1)
728x90