[프로그래머스] 직사각형 좌표 구하기 (3929)(Kotlin)

문제 설명

직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요. 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.

제한 사항

  • v는 세 점의 좌표가 들어있는 2차원 배열입니다.
  • v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
  • 좌표값은 1 이상 10억 이하의 자연수입니다.
  • 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.

예제 입출력

people limit return
[[1, 4], [3, 4], [3, 10]] [1, 10]  
[[1, 1], [2, 2], [1, 2]] [2, 1]  

문제 풀이1

fun solution(v: Array<IntArray>): IntArray {

    val xMap: MutableMap<Int, Int> = mutableMapOf()
    val yMap: MutableMap<Int, Int> = mutableMapOf()

    v.forEach {
        if (xMap.containsKey(it[0]))
            xMap.put(it[0], xMap.getValue(it[0]) + 1)
        else
            xMap.put(it[0], 1)

        if (yMap.containsKey(it[1]))
            yMap.put(it[1], yMap.getValue(it[1]) + 1)
        else
            yMap.put(it[1], 1)

    }

    val x = xMap.filterValues { it == 1 }.keys.toIntArray()
    val y = yMap.filterValues { it == 1 }.keys.toIntArray()


    return intArrayOf(x[0], y[0])

}

문제 풀이2

class Solution {
    fun solution(v: Array<IntArray>): IntArray {
        return intArrayOf(
                v[0][0].xor(v[1][0].xor(v[2][0])),
                v[0][1].xor(v[1][1].xor(v[2][1]))
        )
    }
}