50분
수학, 애드 혹, 사칙연산
124ms
- 제한시간이 매우 짧으므로 Scanner 대신 BufferedReader를 사용한다.
- 최초의 개미 좌표에 t만큼 추가하여 p, q값을 갱신한다.
- 왕복 횟수를 구함으로써 개미의 이동 방향을 파악한다. 이 작업에 왕복 횟수 소수점은 필요하지 않으므로 int값으로 만들었다.
- 왕복 횟수(count)가 짝수라면 우측/상향으로 이동, 홀수라면 좌측/하향으로 이동하는 것이다.
int countX = p/w; //몇 번 왕복하는 중인지
int countY = q/h;
if (countX%2 == 0) {
p = p%w;
} else {
p = w - (p%w);
}
if (countY%2 ==0) {
q = q%h;
} else {
q = h - (q%h);
}
- 시간 단축을 위해 StringBuilder를 이용하여 출력한다.
- 로직 구상이 쉬울 줄 알았는데 어려웠다. 수학적 사고력을 길러보도록 하자.
- StringBuilder랑 서먹하다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st1 = new StringTokenizer(bf.readLine());
int w = Integer.parseInt(st1.nextToken());
int h = Integer.parseInt(st1.nextToken());
StringTokenizer st2 = new StringTokenizer(bf.readLine());
int p = Integer.parseInt(st2.nextToken());
int q = Integer.parseInt(st2.nextToken());
int t = Integer.parseInt(bf.readLine());
p = p + t;
q = q + t;
int countX = p/w; //몇 번 왕복하는 중인지
int countY = q/h;
if (countX%2 == 0) {
p = p%w;
} else {
p = w - (p%w);
}
if (countY%2 ==0) {
q = q%h;
} else {
q = h - (q%h);
}
StringBuilder sb = new StringBuilder();
sb.append(p).append(" ").append(q);
System.out.println(sb);
}
}