티스토리 뷰
규칙을 찾는다면 매우 간단한 문제!
풀이
탐색 알고리즘을 사용하여 풀 수도 있지만 규칙을 찾는다면 정말 간단하게 풀리는 문제이다.
횟수를 종이에 직접 써보면 아래와 같은 표가 생긴다.
가로축, 세로축은 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
링크
TAG
- java
- vue.js
- dp
- regex
- 우선순위큐
- 이분탐색
- Validation
- 알고리즘
- 브루트포스
- form
- 시뮬레이션
- 삼성역테기출
- 구현
- 백준
- 문자열
- CustomHook
- 백트래킹
- swea
- 다익스트라
- 벨만포드
- BFS
- BigInteger
- dfs
- REACT
- matches
- 프로그래머스
- 그래프
- web
- 정규식
- 해시
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함