알고리즘 공부/CodeUp 문제풀이

코드업 4803:개미 (Small)

티들 2023. 9. 26. 22:51

문제 설명

 

가로 길이가 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 ≤1,000이다.

그리고 개미의 초기 위치 p와 q도 자연수이며 범위는 각각 0<p<w 과 0<q<h이다.

그리고 계산할 시간 t의 범위 는 1 ≤t ≤100,000,000이다. 

 

입력

 

입력파일의 첫줄에는 w와 h가 공백을 사이에 두고 주어진다.

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

 

출력

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

 

입력 예시

6 4

4 1

8

 

출력 예시

0 1

 

나의 코드

#include <stdio.h>

int main() {
    int w, h, p, q;	// 변수 선언
    int n1=1, n2=1, t;

    scanf("%d %d\n%d %d\n%d", &w, &h, &p, &q, &t);	// 입력
    for(int i=0; i<t; i++)	// 시간만큼 반복
    {
      if (p+n1>w || p+n1<0)	// 벽튕김 계산
        n1 = -n1;
      if (q+n2>h || q+n2<0)
        n2 = -n2;
      p += n1;	// 값을 더함
      q += n2;
    }
    printf("%d %d", p, q);	// 최종결과 출력
    return 0;
}

 

문제 바로가기: https://codeup.kr/problem.php?id=4803