생각
개미가 2억번이나 도는지 모르고 처음에 dy,dx 방향값을 설정해놓고 매초 개미의 좌표를 구해주는 코드를 작성했습니다.. 시간초과가 나고 개미가 2억번을 도는걸 어떻게 처리해줄지 고민하다가 결국 구글링을 통해 이해했습니다
이해에 도움이 된 블로그 주소입니다! hanstemcell.tistory.com/entry/%EB%B0%B1%EC%A4%80-%EA%B0%9C%EB%AF%B8?category=672485
위의 블로그를 보고 x좌표와 y좌표를 나눠서 생각한다음, 개미가 총 이동한 좌표에서 너비를 나눠주면 개미가 몇번 왕복운동했는지가 나옵니다. 여기서 나눈값이 홀수이면 이미 끝을 찍고 되돌아오는중이기 때문에 x=0인 쪽으로 다가오는 방향입니다. 반대로 짝수이면 x=w인 쪽으로 가고있는중입니다.
즉, x가 홀수일때 x=w축에서 x=0으로 진행하고있습니다. 따라서 개미의 x좌표는 p = W - ((x+t) % W)
x가 짝수일때 x=0축에서 x=w축으로 진행하고있습니다. 따라서 개미의 x좌표는 p = W - ((x+t) % W)
(이렇게 하고 결과출력을 System.out.println으로 하면 시간초과가 나옵니다. StringBuilder에 결과값을 넣어서 출력해주면 해결됩니다!!)
Java code
package com.java.algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Baekjoon_10158_개미 {
static int[] dx = {1,-1,-1, -1};
static int[] dy = {1,1,-1 ,1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String[] info = br.readLine().split(" ");
int W = Integer.parseInt(info[0]);
int H = Integer.parseInt(info[1]);
String[] pos = br.readLine().split(" ");
int x = Integer.parseInt(pos[0]);
int y = Integer.parseInt(pos[1]);
int t = Integer.parseInt(br.readLine());
//t초 후 좌표 계산
/* int ny = 0;
int nx = 0;
int d = 0;
for (int i = 0; i < t; i++) {
ny = y + dy[d];
nx = x + dx[d];
if(ny == H || ny == 0 || nx == W || nx == 0) {
d = (d+1) % 4;
}
y = ny;
x = nx;
//System.out.println(x + " " + y);
}
*/
int xCnt = (x+t)/W; //t초동안 x기준 W를 몇번 움직였는지
int yCnt = (y+t)/H; //t초동안 y기준 W를 몇번 움직였는지
int p,q;
//x좌표
if(xCnt % 2 == 0) { // 왼 -> 오
p = (x+t) % W;
}else { // 왼 <- 오
p = W - ((x+t) % W);
}
//y좌표
if(yCnt % 2 == 0) { // 위로올라감
q = (y+t) % H;
}else { //아래로 내려감
q = H - ((y+t) % H);
}
sb.append(p).append(" ").append(q);
System.out.println(sb);
}
}
'Algorithm' 카테고리의 다른 글
[백준] JAVA - 1018.체스판다시칠하기 (0) | 2021.02.28 |
---|---|
[백준] JAVA - 2559.수열 (0) | 2021.02.28 |
[백준] JAVA - 15686.치킨 배달 (0) | 2021.02.21 |
[백준] JAVA - 3109.빵집 (0) | 2021.02.18 |
[백준] JAVA - 2839.설탕배달 (0) | 2021.02.16 |