[HackerRank/Sql] Symmetric Pairs

less than 1 minute read

문제정보

어떻게 풀까?

대칭이기 때문에 그냥 대칭인 값을 나열하면 반대쪽 대칭의 값까지 노출된다. F1.X < F1.Y 로 대칭된 값은 쳐주고, F1.X = F2.Y인 경우는 COUNT(*)가 2인 경우에만 UNION 해준다.

문제풀이

SELECT F.X, F.Y 
FROM
(
    (
        SELECT F1.X, F1.Y
        FROM FUNCTIONS F1, 
             FUNCTIONS F2
        WHERE F1.X < F1.Y 
        AND F1.X = F2.Y
        AND F1.Y = F2.X)
    UNION
    (
        SELECT X, Y
        FROM FUNCTIONS
        WHERE X = Y
        GROUP BY X, Y
        HAVING COUNT(1) = 2
    ) 
) F
ORDER BY F.X;

Leave a comment