- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Java
- C++
- 백준
- 프로그래밍 입문
- 공유대학
- 자료구조
- 안드로이드
- 구글 로그인
- 동적할당
- 알고리즘
- til
- sql
- 로그인
- 연결리스트
- C언어
- firebase google
- android studio
- 배열
- Firebase
- 프로그래머스
- oauth
- 비주얼 베이직
- 코딩테스트
- 안드로이드 스튜디오
- 파이썬
- 정렬
- python
- 컴퓨터공학과
- 자바
Archives
코딩하는 해달이
[백 준 Java] 1485번 : 정사각형 본문
문제 설명
네 점이 주어졌을 때, 네 점을 이용해 정사각형을 만들 수 있는지 없는지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같은 정수이다. 같은 점이 두 번 이상 주어지지 않는다.
출력
각 테스트 케이스마다 입력으로 주어진 네 점을 이용해서 정사각형을 만들 수 있으면 1을, 없으면 0을 출력한다.
알고리즘
푼 방법
네 개의 점으로 만들 수 있는 모든 변의 길이를 구한 후 집합을 통해 길이가 다른 변이 두 개일 경우에는 정사각형이라 할 수 있다.
풀이코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
List<List<Point>> pointGroup = new ArrayList<>();
List<Rectangle> rectangles = new ArrayList<>();
Main(List<List<Integer>> list) {
for(int i = 0; i < list.size(); i+=4) {
List<Point> points = new ArrayList<>();
for(int j = i; j < i + 4; j++) {
Point point = new Point(list.get(j).get(0), list.get(j).get(1));
points.add(point);
}
pointGroup.add(points);
}
for (List<Point> pg : pointGroup) {
Rectangle r = new Rectangle(pg.get(0),pg.get(1),pg.get(2),pg.get(3));
rectangles.add(r);
}
for (Rectangle r : rectangles) {
System.out.println(r.isSquare());
}
}
public class Point
{
int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public Double toDistance(Point p) {
return Math.sqrt(Math.pow(p.getX() - this.x,2) + Math.pow(p.getY() - this.y,2));
}
}
public class Rectangle {
private List<Point> points = new ArrayList<>();
private Set<Double> distanceSet = new HashSet<>();
public Rectangle(Point p1, Point p2, Point p3, Point p4) {
points.add(p1);
points.add(p2);
points.add(p3);
points.add(p4);
setDistances();
}
private void setDistances() {
Double distance;
for(int i = 0; i < points.size() - 1; i++) {
for(int j = i + 1; j < points.size(); j++) {
distance = points.get(i).toDistance(points.get(j));
distanceSet.add(distance);
}
}
}
public void print() {
System.out.println(distanceSet);
}
public Integer isSquare() {
return (distanceSet.size()==2) ? 1 : 0;
}
}
public static void main(String[] args) throws IOException {
List<List<Integer>> list = new ArrayList<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int t = Integer.parseInt(st.nextToken());
for(int i = 0; i < t * 4; i++) {
st = new StringTokenizer(br.readLine());
int px1 = Integer.parseInt(st.nextToken());
int py1 = Integer.parseInt(st.nextToken());
List<Integer> l = new ArrayList<>();
l.add(px1);
l.add(py1);
list.add(l);
}
Main main = new Main(list);
}
}
링크
https://www.acmicpc.net/problem/1485
반응형
'개인 공부 > 백준' 카테고리의 다른 글
[백 준 Java] 16430번 문제 : 제리와 톰 (0) | 2023.04.04 |
---|---|
[백 준 Java] 2562번 : 최댓값 (0) | 2023.03.28 |
[백 준 Java] 11021번 문제 : A+B - 7 (0) | 2023.03.11 |
[백 준 Java] 15552번 문제 : 빠른 A+B (0) | 2023.03.09 |
[백 준 Java] 2531번 문제 : 코딩은 체육과목입니다. (0) | 2023.03.08 |
Comments