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=' ')
'백준(BOJ)' 카테고리의 다른 글
[Python/파이썬] - 백준(BOJ) 14500번 : 테트로미노 (0) | 2022.07.11 |
---|---|
[Python/파이썬] - 백준(BOJ) 2583번 : 영역 구하기 (0) | 2022.07.10 |
[Python/파이썬] - 백준(BOJ) 11559번 : Puyo Puyo (0) | 2022.06.16 |
[Python/파이썬] - 백준(BOJ) 14500번 : 테트로미노 (0) | 2022.06.15 |
[Python/파이썬] - 백준(BOJ) 1806번 : 부분합 (0) | 2022.06.06 |