본문 바로가기
BaekJoon/Silver

[BOJ/JAVA] 백준 10158 : 개미 (자바)

by HoonSikE 2022. 3. 26.
반응형
SMALL
문제 정보
  문제명   - 개미
  난이도   - 실버 IV
문제 번호 - 10158번

문제 링크

BOJ_S4_10158_개미

 

10158번: 개미

가로 길이가 w이고 세로 길이가 h인 2차원 격자 공간이 있다. 이 격자는 아래 그림처럼 왼쪽 아래가 (0,0)이고 오른쪽 위가 (w,h)이다. 이 공간 안의 좌표 (p,q)에 개미 한 마리가 놓여있다. 개미는 오

www.acmicpc.net


문제
가로 길이가 w이고 세로 길이가 h인 2차원 격자 공간이 있다. 이 격자는 아래 그림처럼 왼쪽 아래가 (0,0)이고 오른쪽 위가 (w,h)이다. 이 공간 안의 좌표 (p,q)에 개미 한 마리가 놓여있다. 개미는 오른쪽 위 45도 방향으로 일정한 속력으로 움직이기 시작한다. 처음에 (p,q)에서 출발한 개미는 1시간 후에는 (p+1,q+1)로 옮겨간다. 단, 이 속력으로 움직이다가 경계면에 부딪치면 같은 속력으로 반사되어 움직인다.
위 그림은 6×4 격자에서 처음에 (4,1)에서 출발한 개미가 움직인 길을 보여주고 있다. 처음에 (4,1)에 있는 개미는 2시간 후에 (6,3)에 있으며 8시간 후에 (0,1)에 있다. 만일 그 개미가 처음에 (5,3)에 있었다면 매 시간마다 (6,4), (5,3), (4,2), (3,1)로 움직인다. 
여러분은 크기 w×h인 격자 공간에서 처음에 (p,q)에서 출발하는 개미의 t시간 후의 위치 (x,y)를 계산하여 출력해야 한다. 개미는 절대 지치지 않고 같은 속력으로 이동한다고 가정한다. 
문제에서 w와 h는 자연수이며 범위는 2 ≤ w,h ≤ 40,000이다. 그리고 개미의 초기 위치 p와 q도 자연수이며 범위는 각각 0 < p < w과 0 < q < h이다. 그리고 계산할 시간 t의 범위는 1 ≤ t ≤ 200,000,000이다. 

입력
첫줄에는 w와 h가 공백을 사이에 두고 주어진다.
그 다음 줄에는 초기 위치의 좌표값 p와 q가 공백을 사이에 두고 주어진다.
3번째 줄에는 개미가 움직일 시간 t가 주어진다. 

출력
출력은 t 시간 후에 개미의 위치 좌표 (x,y)의 값 x와 y를 공백을 사이에 두고 출력한다. 

예제 입력/출력
예제 입력 예제 출력
6 4
4 1
8
0 1
6 4
5 3
4
3 1

알고리즘 분류
● 수학
● 사칙연산
● 애드 훅


소스코드
package Lv2_Silver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
 * @author HanHoon
 * @category 수학, 사칙연산, 애드 훅
 * https://www.acmicpc.net/problem/10158
 */
public class BOJ_S4_10158_개미 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		// W: 가로길이, H:세로길이
		int W = Integer.parseInt(st.nextToken());
		int H = Integer.parseInt(st.nextToken());
		// 초기위치 P,Q
		st = new StringTokenizer(br.readLine(), " ");
		int P = Integer.parseInt(st.nextToken());
		int Q = Integer.parseInt(st.nextToken());
		// T: 개미가 움직일 시간(단위시간 1시간)
		int T = Integer.parseInt(br.readLine());
		int y = Q+T;
		if(y%(2*H) <= H)
			y = y%(2*H);
		else
			y = 2*H - y%(2*H);
		
		int x = P+T;
		if(x%(2*W) <= W)
			x = x%(2*W);
		else
			x = 2*W - x%(2*W);
		System.out.println(x + " " + y);
		br.close();
	}
}

 


BaekJoon List
 

BaekJoon List

BOJ Start!! ● [BOJ] 백준 회원가입, 시작하는 법 ● [BOJ] 등급(티어) 및 Solved.AC 적용 ● [BOJ/JAVA] 백준 소스코드 제출 시 유의사항(자바) Bronze ● Bronze V  - ● Bronze IV  - ● Bronze III  -..

han-hoon.tistory.com


  

기회는 준비된 자에게 찾아온다.

 


 

반응형
LIST

댓글