반응형
문제
네 점이 주어졌을 때, 네 점을 이용해 정사각형을 만들 수 있는지 없는지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같은 정수이다. 같은 점이 두 번 이상 주어지지 않는다.
출력
각 테스트 케이스마다 입력으로 주어진 네 점을 이용해서 정사각형을 만들 수 있으면 1을, 없으면 0을 출력한다.
예제 입력 1
2
1 1
1 2
2 1
2 2
2 2
3 3
4 4
5 5
예제 출력 1
1
0
풀이(kotlin)
- 변의 길이 4가지와 대각선의 길이 2가지를 구한다.
- 변의 길이 4개가 모두 같고 대각선의 길이가 같으면 정사각형이다
private val r = System.`in`.bufferedReader()
private val w = System.out.bufferedWriter()
data class Pos(val x: Int, val y: Int)
fun getDistance(from: Pos, to: Pos): Int {
return (from.x - to.x) * (from.x - to.x) + (from.y - to.y) * (from.y - to.y)
}
fun main() {
val t = r.readLine().toInt()
repeat(t) {
val arr = arrayOfNulls<Pos>(4)
repeat(4) { i ->
val (x, y) = r.readLine().split(" ").map { it.toInt() }
arr[i] = Pos(x, y)
}
val lens = mutableListOf<Int>()
//총 6가지의 길이 : 변의 길이 4가지 대각선의길이 2가지를 구한다.
for (i in arr.indices) {
for (j in i + 1 until arr.size) {
lens.add(getDistance(arr[i]!!, arr[j]!!))
}
}
lens.sort()
//index: 0~3는 변의길이 / 4,5는 대각선의 길이
if (lens[0] == lens[1] && lens[1] == lens[2] && lens[2] == lens[3] && lens[4] == lens[5])
w.write("1\n")
else w.write("0\n")
}
w.close()
}
반응형
댓글