[BOJ] 10158. 개미

Hyodong Lee·2022년 2월 9일
0

알고리즘

목록 보기
3/32

[작성일]

  • 2022-02-10

[분류]

  • 구현


[문제링크]

[요구사항]

  • t시간 이후 좌표를 구해라.


[풀이]

처음에는 1씩 더해가며 방향을 바꿔주는 분기처리를 하는 방식으로 구현을 했는데 시간초과가 났다. 결국 풀이를 참고했는데 가로, 세로는 완전히 별개로 생각하여 2W나 2H 이후에 같은 자리로 돌아오는 성질을 이용해야한다는 것을 깨달았다.

1) x, y 좌표 각각을 현재 점에서 t만큼 더하고 2W, 2H로 각각 나눠 나머지를 구한다.

2) 그 나머지가 W, H 보다 각각 클 경우 2H, 2W에서 빼줘서 나머지를 구한다.

3) StringBuilder를 이용해 출력한다.



[코드]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Main {
    static int W, H;
    static int p, q, t;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        W = Integer.parseInt(st.nextToken());
        H = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());
        p = Integer.parseInt(st.nextToken());
        q = Integer.parseInt(st.nextToken());
        t = Integer.parseInt(br.readLine());

        int x = (p + t) % (2 * W);
        int y = (q + t) % (2 * H);

        if (W < x) {
            x = 2 * W - x;
        }
        if (H < y) {
            y = 2 * H - y;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(x).append(" ").append(y);
        System.out.println(sb);
    }
}

[통과여부]

image

[느낀점]

t, w, h의 범위와 제한시간을 보고 독특한 O(1) 방식이 있을 것이라는 추측을 했어야하는데 아쉽다.

profile
사용자가 신뢰할 수 있는 튼튼한 서비스 개발을 지향하는 예비 개발자입니다.

0개의 댓글