본문 바로가기
Computer/Algorithm

백준 1485

by HanDongWook 2022. 9. 25.
반응형

문제

네 점이 주어졌을 때, 네 점을 이용해 정사각형을 만들 수 있는지 없는지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 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()
}
반응형

'Computer > Algorithm' 카테고리의 다른 글

백준 2166  (1) 2022.09.26
백준 11758  (0) 2022.09.26
백준 3097  (0) 2022.09.23
백준 1297  (0) 2022.09.22
백준 4153  (0) 2022.09.22

댓글