해커랭크: Symmetric Pairs (MySQL)

SIMPLY_DAILY·2024년 8월 29일

해커랭크의 Symmetric Pairs 문제에 대한 정리를 해보고자 합니다.
해결하는데 시간을 많이 쏟았지만 결국 스스로 풀지 못하고 여러 블로그를 참고한 끝에 이해한 문제입니다..

우선 쿼리문을 작성하기 전에 테이블을 보며 문제를 이해해봅시다.

[테이블명: Functions]

해당 문제에서 활용할 Functions 테이블은 X, Y 두 개의 컬럼으로 구성되어 있습니다.

symmetric pairs(X1, Y1) (X2, Y2)는 X1 = Y2 그리고 X2 = Y1 인 두 항을 의미합니다.

예를 들어, 위의 표에서 조건에 만족하는 순서쌍은 (20,20)(20,20) (20,21)(21,20) (23,22)(22,23) 으로 총 3가지!

테이블에 대해 어느 정도 파악이 되었으니, 구하고자 하는 문제가 무엇인지 살펴봅시다.

' X컬럼을 기준으로 오름차순 정렬한 symmetric pairs에서
X <= Y 인 하나의 행만 출력하기 '

1) symmetric pairs 형태를 만들기 위해 Self Join을 합니다.

(조인까지는 진행했지만 그 다음부터는 생각해내기 어려웠어요 ....)

2) GROUP BY로 출력값의 중복을 제거합니다.

3) HAVING절에 f1.X <= f1.Y 를 만족하는 조건을 작성합니다.

이때, 두 가지 경우로 나누어볼 수 있습니다.

  1. f1.X = f1.Y인 경우

    쌍을 기준으로 생각했을 때, 두 수가 같으면 COUNT한 값이 1보다 크기 때문에 COUNT(f1.X) > 1 로 작성합니다.
    (COUNT(*) > 1 도 가능)

  2. f1.X < f1.Y인 경우

두 가지 조건을 OR(또는)로 연결해줍니다.

4) f1.X를 기준으로 오름차순 정렬을 해줍니다.

검색해보니 UNION을 이용해 쿼리문을 작성하는 방법도 있던데, 나중에 그렇게도 한번 풀어보면 좋을 것 같네요!

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

0개의 댓글