티스토리 뷰

코딩테스트/백준

[BJ] 10158. 개미

jhk828 2021. 2. 25. 22:31

[BJ] 10158. 개미

www.acmicpc.net/problem/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
}

 

 

'코딩테스트 > 백준' 카테고리의 다른 글

[BJ] 17413. 단어 뒤집기2  (0) 2021.02.26
[BJ] 1244. 스위치 켜고 끄기  (0) 2021.02.26
[BJ] 13300번: 방 배정  (0) 2021.02.22
[BJ] 2108. 통계학  (0) 2021.02.15
[BJ] 1012. 유기농 배추  (0) 2021.02.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함