코딩테스트/백준
[BJ] 10158. 개미
jhk828
2021. 2. 25. 22:31
[BJ] 10158. 개미
10158번: 개미
가로 길이가 w이고 세로 길이가 h인 2차원 격자 공간이 있다. 이 격자는 아래 그림처럼 왼쪽 아래가 (0,0)이고 오른쪽 위가 (w,h)이다. 이 공간 안의 좌표 (p,q)에 개미 한 마리가 놓여있다. 개미는 오
www.acmicpc.net
1. 반복문을 돌리며 한칸씩 개미를 움직이면 시간 초과가 난다. 반복되는 구간을 모듈러 연산으로 제거한 후 나머지 시간 동안만 움직이면 된다.
2. 실제 자바 2차원 배열의 인덱스를 움직이며 값을 계산하는게 아니기 때문에. 수학 좌표 위 x, y축의 값을 움직인다. 따라서 45도 방향으로 가는 개비의 y값을 -1하지 않고 +1 해야 한다.
import java.io.*;
import java.util.*;
// 210225
// https://www.acmicpc.net/problem/10158
public class Main_BJ_10158_개미 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int w = sc.nextInt();
int h = sc.nextInt();
int x = sc.nextInt();
int y = sc.nextInt();
int t = sc.nextInt(); // 초
// 우로 w초, 좌로 w초, 총 2w초 후에 개미의 x 위치는 초기 위치와 같다.
// => 따라서 2w초 가고난 나머지 시간에 이동한 위치만 계산해준다.
int tx = t % (2*w);
// 위로 h초, 아래로 h초, 총 2h초 후에 개미의 y 위치는 초기 위치와 같다.
int ty = t % (2*h);
int d=1;
for(int i=0; i<tx; i++) {
if (x==w || x==0) d*=-1; // 위나 바닥에 닿으면 방향 전환
x += d;
}
d=1;
for(int i=0; i<ty; i++) {
if (y==h || y==0) d*=-1; // 위나 바닥에 닿으면 방향 전환
y += d;
}
System.out.println(x + " " + y);
sc.close();
} // main
}