CS/알고리즘_문제풀이(파이썬)

1차원 큰 이동

Jedy_Kim 2021. 6. 18. 10:52
728x90

문제

1 번부터 n 번까지 총 n 개의 공간이 있는 1차원 배열의 x 번 위치에 사람이 있다. 이 사람은 초기 방향 d 로 1 초에 한 칸 씩 이동하는데, 배열의 끝에 도착하면 다음 이동 시 뒤로 돌아서 반대 방향으로 이동한다. t 초 뒤 이 사람의 위치와 방향을 출력하여라.

d 가 0 이면 좌표가 감소하는 방향, d 가 1이면 좌표가 증가하는 방향으로 이동한다.

입력

첫 줄에 정수 n, x, d, t 가 주어진다.

(3 ≤ n ≤ 1,000,000,000, 1 ≤ x ≤ n, 0 ≤ d ≤ 1, 0 ≤ t ≤ 1,000,000,000)

출력

t 초 후 사람의 위치와 방향을 출력한다.

입력의 예 1

6 4 0 5

출력의 예 1

3 1

입력의 예 2

5131 555 0 35491

출력의 예 2

4158 1

입력의 예 3

21354 3124 0 861231

출력의 예 3

3989 1

입력의 예 4

463571372 78942314 1 1000000000

출력의 예 4

151799572 1

 

#코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
 
 
if __name__ == "__main__":
  input = sys.stdin.readline
  
  n, x, d, t = map(int, input().split())
  
  t %= (2*n-2)
  dx = [-11
 
  while x+t*dx[d] < 1 or x+t*dx[d]>n:
    if x+t*dx[d]<1:
      t -= x-1
      x=1
      d=1
    elif x+t*dx[d]>n:
      t -= n-x
      x = n
      d = 0
  x += t*dx[d]
  print(x, d)
cs

 

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

이동 알고리즘 2  (0) 2021.06.18
2차원 큰 이동  (0) 2021.06.18
N명 이동  (0) 2021.06.17
ICEBERG[백준 2573]  (0) 2021.06.16
SLIKAR  (0) 2021.06.16