본문 바로가기
일일 문제 풀이/HackerRank

[SQL] 해커랭크 HakerRank 문제 풀이 Symmetric Pairs

by 엘리는 코딩 마스터 2025. 3. 17.

문제

 

문제

You are given a table, Functions, containing two columns: and Y.

(그림 확인)

Two pairs (X1, Y1) and (X2, Y2) are said to be symmetric pairs if X1 = Y2 and X2 = Y1.

Write a query to output all such symmetric pairs in ascending order by the value of X. List the rows such that X1 ≤ Y1.

 

해석

주어진 테이블 **Functions**에는 두 개의 컬럼 **X**와 **Y**가 존재한다.

이 테이블에서 **대칭 쌍(Symmetric Pairs)**을 찾아야 한다.
두 개의 쌍 (X1, Y1)과 (X2, Y2)가 대칭 쌍이라고 불리려면, 다음 조건을 만족해야 한다

 

  • X1 = Y2 이고 X2 = Y1 (즉, (X1, Y1)과 (X2, Y2)가 서로 위치를 바꾼 경우)
  • 출력되는 (X1, Y1) 값은 X1 ≤ Y1를 만족해야 한다.
  • 결과는 X1 기준으로 오름차순 정렬해야 한다.

 

 

처음 내가 생각한 답

SELECT DISTINCT LEAST(f1.X, f1.Y) AS X, GREATEST(f1.X, f1.Y) AS Y
FROM Functions f1
JOIN Functions f2 
ON f1.X = f2.Y AND f1.Y = f2.X
ORDER BY X;

 

정답

SELECT x, y
FROM functions 
WHERE x = y 
GROUP BY x, y
HAVING COUNT(*) = 2 

UNION

SELECT f1.x, f1.y 
FROM functions AS f1
        INNER JOIN functions AS f2 ON f1.x = f2.y AND f1.y = f2.x
WHERE f1.x < f1.y
ORDER BY x

 

배운 점

  • LEAST 함수와 GREATEST 함수에 대해 알게 됨
  • x,y가 같은 경우와 다른 경우를 따로 생각하는 방법이 있는 데 같은 경우는 having 절에 count 함수를 사용해서 진행한다.
  • 조인의 경우 두가지 조건으로도 진행할 수 있다. f1.x = f2.y and f1.y = f2.x  이 문장은 서로 다른 x, y가 순서가 바뀌는 경우의 행들만 남게 되는 것이다.