백준(BOJ)

[Python/파이썬] - 백준(BOJ) 3221번 : 개미의 이동

phanre 2022. 7. 12. 08:24

https://www.acmicpc.net/problem/3221

 

3221번: 개미의 이동

첫째 줄에 줄의 길이 L과 T가 주어진다. (2 ≤ L ≤ 200,000, 1 ≤ T ≤ 1,000,000) T의 단위는 초이다. 둘째 줄에는 개미의 수 N이 주어진다. (1 ≤ N ≤ 70,000, N < L) 다음 N개 줄에는 개미의 처음 위치 (줄의

www.acmicpc.net

 

개미 여러마리가 일직선상을 이동하는데 서로 부딪히거나 벽에 부딪히면 방향을 바꿉니다.

1초 마다 1씩 이동하는데 T초 후의 개미의 위치를 파악하는 문제입니다.

 

처음에는 개미끼리 부딪힐 때 어떻게 처리를 해야하나 고민했으나

생각해보니 개미끼리 부딪힐 경우 부딪힌 다른 개미가 이동하는 방향으로 움직였습니다.

여기까지는 금방 생각하였으나 개미별 위치를 알아내야 되기 때문에 고민하던 도중

어차피 처음의 개미가 왼쪽부터 오른쪽까지 1번 ~ N번 이고 그 상대적인 위치는 변하지 않는다는 것을 알게되었습니다.

 

왜냐면 부딪히면 방향을 바꾸기 때문에 서로 스쳐 지나갈 수 없기 때문입니다.

따라서 개미끼리 부딪히는 것은 신경쓰지 않고 벽에만 부딪히는 경우를 생각하여 

개미의 위치를 sort하여 나타내었습니다.

 

 

import sys
input = sys.stdin.readline

l, t = map(int,input().split())
n = int(input())
loc = []
vec = []

for _ in range(n):
    a, b = map(str, input().split())
    loc.append(int(a))
    if b == 'L':
        vec.append(-1)
    else:
        vec.append(1)

for i in range(n):
    loc[i] += vec[i] * t
    while loc[i] > l or loc[i] < 0:
        if loc[i] > l:
            loc[i] = 2*l - loc[i]
        elif loc[i] < 0:
            loc[i] = -loc[i]
        vec[i] = -vec[i]

print(*sorted(loc),sep=' ')