Koder / 박성훈
article thumbnail

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

 

10158번: 개미

가로 길이가 w이고 세로 길이가 h인 2차원 격자 공간이 있다. 이 격자는 아래 그림처럼 왼쪽 아래가 (0,0)이고 오른쪽 위가 (w,h)이다. 이 공간 안의 좌표 (p,q)에 개미 한 마리가 놓여있다. 개미는 오

www.acmicpc.net

개미의 위치를 구하는 문제.

시뮬레이션 태그가 붙을것 같이 생겼지만, t의 범위가 터무니없기때문에

다른 접근을 시도해야 한다.

 

우선 첫번째로, 초당 1칸씩 이동하기 때문에

이동거리를 (x+t) 와 같이 생각해볼 수 있다.

 

x축과 y축을 분리해서 생각하는 것이 핵심이다.

 

개미가 y축 이동방향을 무시한다고 가정하면

개미는 x축에서 좌우의 벽에 튕기면서 이동하는 모습을 보일 것이고,

x축 이동방향을 무시하고 생각해보면 y축 상하 벽에 튕기면서 이동하게 된다.

이때 튕기는 횟수에 따라서 진행방향이 바뀐다.

 

(x+t) 로 계산한 위치가 가로길이 w로 나누어진 몫이 벽에 튕기는 횟수가 되며,

벽에 튕겨나오고 나서 이동한 거리는 (x+t) 를 w로 나눈 나머지가 된다.

 

세로 축에 대해서도 동일한 계산을 해주면

x축 좌표와 y축 좌표를 따로따로 구할 수 있고

이 둘을 합쳐서 출력해주면 되는 문제.

 

#include <bits/stdc++.h>
using namespace std;

int main(){
	int w,h;
	int p,q;
	int t;
	cin >> w >> h;
	cin >> p >> q;
	cin >> t;
	
	int dx = (p+t)/w;
	int nx = (p+t)%w;
	
	int dy = (q+t)/h;
	int ny = (q+t)%h;
	
	if(dx%2 == 1) nx = w-nx;
	if(dy%2 == 1) ny = h-ny;
	
	cout << nx << " " << ny;
	
	return 0;
}
반응형