해커랭크 [Symmetric Pairs]

윤태영·2024년 8월 28일
0

문제

https://www.hackerrank.com/challenges/symmetric-pairs/problem?isFullScreen=true

Functions 테이블에서,
(x1, y1)과 (x2, y2) 두 쌍이 x1 = y2이고 y1 = x2 이면 대칭이다.
즉, 2개의 row가 나란히 세로로 있을때 X자 방향으로 값이 서로 같으면 대칭인 것.

이처럼 대칭인 row를 출력하는 쿼리를 짜되,
x1 <= y1이고 x, y 쌍을 x칼럼 기준으로 오름차순하는 쿼리를 작성해보자.

INPUT FORMAT

TABLE NAME : Functions

SAMPLE INPUTS

Sample Output

문제풀이

1) Functions 테이블 사용

2) 대칭이 되는 두 쌍인 데이터를 구하는 문제

3) (x1, y1) (x2, y2) <-이렇게 두 쌍이 필요하기 때문에 self join

4) X1 = Y2 and X2 = Y1

5) X1 <= Y1 그 중에서도 x가 y보다 작은 값만 출력하겠다

6) 순서 나열은 X 값의 오름차순으로 정렬


즉, 대칭되는 다른 row 하나를 가지고 있는 row들만 출력하기 위해 INNER JOIN 시
ON f1.x = f2.y AND f1.y = f2.x 조건으로 찾을 수 있고,

f1.x != f1.y 조건을 줬을때, x = y 값이 다른 row들을 확인해볼 수 있다.
(x = y인 값들도 조인 시 나타나는데, 확인해보면 x = y인 row가 하나만 있으면 조인 결과도 하나만 나오고
(20, 20) row가 2개 있으면 조인 결과에서도 나란히 나타남.)

쿼리


# X와 Y가 같지 않은 것과 같은 것을 UNION으로 묶어서 보여주기
# X와 Y가 같을 떄


SELECT X, Y
FROM Functions
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(X) = 2

UNION
# X와 Y가 같을 떄
SELECT A.X, A.Y
FROM Functions A
    INNER JOIN Functions B ON A.X = B.Y AND B.X = A.Y
WHERE A.X < A.Y
ORDER BY X
profile
ice blue

0개의 댓글