티스토리 뷰

알고리즘

[SWEA] 8382. 방향 전환 (Java)

melthleeth 2020. 12. 5. 02:56

규칙을 찾는다면 매우 간단한 문제!

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

풀이

탐색 알고리즘을 사용하여 풀 수도 있지만 규칙을 찾는다면 정말 간단하게 풀리는 문제이다.

횟수를 종이에 직접 써보면 아래와 같은 표가 생긴다.

 

 

가로축, 세로축은 n에따라 짝수는 4n, 홀수는 4n+1의 값을 가진다.

보면 1씩 번갈아가면서 값이 바뀌는 것을 확인할 수 있는데 이를 토대로 규칙을 설정하면 된다.

Logic

  • (x1, y1)과 (x2, y2)사이의 거리를 절댓값을 취하여 구해놓는다. (dx, dy)
  • (n, n) 기준으로 대칭이므로 x를 기준으로 보도록 한다. dx<dy라면 swap해서 dx가 항상 크도록 한다.
  • 정답인 ans값을 미리 초기화하는데 ans = (dx / 2) * 4 + (dx % 2)이다.

코드

import java.util.*;
import java.io.*;

public class Solution {
    static int T, x1, y1, x2, y2, ans;

    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        T = Integer.parseInt(br.readLine());

        for (int index = 1; index <= T; index++) {
            st = new StringTokenizer(br.readLine());
            x1 = Integer.parseInt(st.nextToken());
            y1 = Integer.parseInt(st.nextToken());
            x2 = Integer.parseInt(st.nextToken());
            y2 = Integer.parseInt(st.nextToken());
            ans = 0;

            int dx = Math.abs(x2 - x1);
            int dy = Math.abs(y2 - y1);

            if (dy > dx) {
                int temp = dx;
                dx = dy;
                dy = temp;
            }

            ans = (dx / 2) * 4 + (dx % 2);

            if (dy % 2 == 1) {
                if (dx % 2 == 1) ans++;
                else ans--;
            }

            bw.write("#" + index + " " + ans + "\n");
        }
        br.close();
        bw.close();
    }
}

 

실행결과

 

'알고리즘' 카테고리의 다른 글

[백준] 14891. 톱니바퀴 (Java)  (0) 2020.12.20
[백준] 3190. 뱀 (Java)  (0) 2020.12.16
[백준] 15683. 감시 (Java)  (0) 2020.12.15
[백준] 16236. 아기상어 (Java)  (0) 2020.12.12
[백준] 18513. 샘터 (Java)  (0) 2020.12.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함