[Hacker Rank] SQL Intermediate 'Symmetric Pairs' (Medium)

2025. 8. 22. 19:06·코딩 테스트/02. SQL

📌 문제 목표

  • 목표 : 테이블에서 이런 대칭 쌍들을 모두 찾기.
  • 출력
    • X 기준 오름차순으로 정렬.
    • X ≤ Y 조건을 만족하는 행만 보이기.
      • 즉 (X, Y)와 (Y, X)가 있더라도, 작은 값을 X에 두는 쪽만 출력.

📌 문제 해결 접근 과정

1. 대칭 쌍의 정의

  • 두 행 (X1, Y1)과 (X2, Y2)가 있을 때
    X1 = Y2 그리고 X2 = Y1이면 대칭 쌍(pair) 이다.
  • 즉, (X,Y)와 (Y,X)가 모두 존재해야 대칭이다.

2. 경우를 나누는 이유

대칭 쌍은 두 가지 경우가 존재합니다

  1. 서로 다른 값인 경우: X < Y
    • (a,b)와 (b,a)가 둘 다 있는지 확인
  2. 같은 값인 경우: X = Y
    • (a,a) 한 번만 있으면 대칭이라 할 수 없음
    • 최소 2회 이상 존재해야 서로 반영된 대칭으로 인정

3. 해결 방법

  • 서로 다른 값 (X < Y)
    → Functions 테이블을 셀프 조인해서 (X,Y)와 (Y,X)가 모두 있는 경우만 선택
  • 같은 값 (X = Y)
    → GROUP BY 후 HAVING COUNT(*) > 1로 중복 존재 여부 확인
  • 두 결과를 UNION으로 합쳐 최종 출력

4. 핵심 주의점

  • X = Y인 경우는 반드시 중복 여부 확인 필요
  • 대칭의 정의상, 단일 (a,a)는 자기 자신만 있을 뿐 대칭이 아님
  • 따라서 HAVING COUNT(*) > 1 조건으로 필터링

[최종 작성 쿼리]

SELECT DISTINCT f1.X, f1.Y
FROM Functions f1
JOIN Functions f2
  ON f1.X = f2.Y
 AND f1.Y = f2.X
WHERE f1.X < f1.Y

UNION

SELECT X, Y
FROM Functions
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(*) > 1

ORDER BY X ASC, Y ASC;

셀프조인을 사용하는 경우

: 같은 테이블 안에서 행과 행을 비교해야하는 경우

 

  • 직원-상사 구조
  • 대칭/역관계 찾기
  • 같은 그룹 안에서 짝짓기
  • 네트워크/경로 역방향 확인

 

 

'코딩 테스트 > 02. SQL' 카테고리의 다른 글

[프로그래머스]Oracle SQL(Lv2,10문제)  (0) 2025.09.12
[프로그래머스] Oracle SQL (Lv1, 24문제)  (1) 2025.09.11
[Hacker Rank] SQL Intermediate 'Contest Leaderboard' (Medium)  (0) 2025.08.22
[Hacker Rank] SQL Intermediate 'Top Competitors' (Medium)  (0) 2025.08.22
[Hacker Rank] SQL Intermediate 'The Report' (Medium)  (0) 2025.08.22
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [프로그래머스]Oracle SQL(Lv2,10문제)
  • [프로그래머스] Oracle SQL (Lv1, 24문제)
  • [Hacker Rank] SQL Intermediate 'Contest Leaderboard' (Medium)
  • [Hacker Rank] SQL Intermediate 'Top Competitors' (Medium)
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rank
    streamlit
    git
    Reset
    쿼리테스트
    cross_join
    코딩테스트
    tableaubootcamp
    AARRR
    이행성
    tableau
    ROW_NUMBER
    revert
    코테
    SQL
    solvesql
    DENSE_RANK
    윈도우함수
    프로그래머스
    코드잇스프린트후기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[Hacker Rank] SQL Intermediate 'Symmetric Pairs' (Medium)
상단으로

티스토리툴바