본문 바로가기

Algorithm

[백준] JAVA - 10158.개미

생각

개미가 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