250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준#BOJ#2615#오목
- 백준#BOJ#1939#중량제한
- 백준#BOJ#8012#한동이는영업사원
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#boj#16932#모양만들기
- 백준#boj#12755
- 백준#BOJ#12865#평범한배낭
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[ boj : 22942 ] 데이터 체커 본문
https://www.acmicpc.net/problem/22942
해설 : 이 문제 꽤 재밌었습니다.
먼저 원의 교점이 없어야 합니다. 이때 중요한 포인트는 원의 x 좌표만 다를뿐 y 좌표는 동일하다는 것이죠. 즉, 굳이 원으로 표현해줄 필요없이 일직선으로 표현해 줄 수 있다는 것 입니다.
입력이
5 4
3 1
6 1
이런식으로 들어왔다고 하면 그림과 같이 표현해 줄 수 있겠죠. 그러면 NO 가 될 조건은???한 일직선이 다른 일직선 사이에 '걸쳐있으면' 됩니다.
이렇게 말이죠.
이는 스택을 사용해서 걸러주면 되겠죠?
//package com.boj.practice;
import java.io.*;
import java.security.KeyPair;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.StringTokenizer;
import static java.lang.Math.*;
public class Main {
static FastReader scan = new FastReader();
//정답은 sb에 append 를 사용하여 출력
//만약 개행까지 출력하고 싶으면 append('\n')을 추가
static StringBuilder sb = new StringBuilder();
static final int SIZE = 1_100_000;
public static void main(String[] args) {
input();
}
static void input(){
int n = scan.nextInt();
int x,y;
int[] arr = new int[2*SIZE];
int[] index = new int[SIZE];
List<Pair> list = new ArrayList<>();
String ans="YES";
for(int i=0;i<n;i++){
x= scan.nextInt();
y = scan.nextInt();
list.add(new Pair(x-y,i));
list.add(new Pair(x+y,i));
arr[(x-y)+SIZE]+=1;
arr[(x+y)+SIZE]+=1;
if(arr[(x-y)+SIZE]>=2 || arr[(x+y)+SIZE]>=2){
ans="NO";
}
index[i]+=2;
}
if(ans=="NO"){
System.out.println(ans);
return;
}
list.sort((A,B)->{
return A.x<B.x?-1:1;
});
//list.forEach(u-> System.out.println(u.x+" "+u.y));
Stack<Pair> st = new Stack<>();
for(Pair u : list){
if(index[u.y]>=2){
st.push(u);
index[u.y]-=1;
}
else if(st.peek().y==u.y){
st.pop();
}
else{
ans="NO";
break;
}
}
System.out.println(ans);
}
static class Pair{
int x,y;
public Pair(int x, int y) {
this.x = x;
this.y = y;
}
}
static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[ boj : 2343 ] 기타 레슨 (0) | 2022.01.28 |
---|---|
[ boj : 22868 ] 산책(small) (0) | 2022.01.26 |
[ boj : 7573 ] 고기잡이 (0) | 2022.01.22 |
[ boj : 1301 ] 비즈 공예 (0) | 2022.01.17 |
[ boj : 22236 ] 가희와 비행기 (0) | 2022.01.16 |