πŸ’― Coding Test/SQL ν…ŒμŠ€νŠΈ

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (Lv 3) - μ—…κ·Έλ ˆμ΄λ“œ ν•  수 μ—†λŠ” μ•„μ΄ν…œ κ΅¬ν•˜κΈ°

Dev_sHu 2024. 3. 26. 17:23

1) 문제 μ„€λͺ…

  • μ–΄λŠ ν•œ κ²Œμž„μ—μ„œ μ‚¬μš©λ˜λŠ” μ•„μ΄ν…œλ“€μ€ μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

  • 'ITEM_A'->'ITEM_B'와 같이 μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•  λ•Œ'ITEM_A'λ₯Ό 'ITEM_B'의 PARENT μ•„μ΄ν…œ,PARENT μ•„μ΄ν…œμ΄ μ—†λŠ” μ•„μ΄ν…œμ„ ROOT μ•„μ΄ν…œμ΄λΌκ³  ν•©λ‹ˆλ‹€.

 

  • 예λ₯Ό λ“€μ–΄ 'ITEM_A'->'ITEM_B'->'ITEM_C' 와 같이 μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•œ μ•„μ΄ν…œμ΄ μžˆλ‹€λ©΄'ITEM_C'의 PARENT μ•„μ΄ν…œμ€ 'ITEM_B','ITEM_B'의 PARENT μ•„μ΄ν…œμ€ 'ITEM_A', ROOT μ•„μ΄ν…œμ€ 'ITEM_A'κ°€ λ©λ‹ˆλ‹€.

 

  • λ‹€μŒμ€ ν•΄λ‹Ή κ²Œμž„μ—μ„œ μ‚¬μš©λ˜λŠ” μ•„μ΄ν…œ 정보λ₯Ό 담은 ITEM_INFO ν…Œμ΄λΈ”κ³Ό μ•„μ΄ν…œ 관계λ₯Ό λ‚˜νƒ€λ‚Έ ITEM_TREE ν…Œμ΄λΈ”μž…λ‹ˆλ‹€.

 

  • ITEM_INFO ν…Œμ΄λΈ”μ€ λ‹€μŒκ³Ό κ°™μœΌλ©°, ITEM_ID, ITEM_NAME, RARITY, PRICEλŠ” 각각 μ•„μ΄ν…œ ID, μ•„μ΄ν…œ λͺ…, μ•„μ΄ν…œμ˜ 희귀도, μ•„μ΄ν…œμ˜ 가격을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
     
Column name Type Nullable
ITEM_ID INTEGER FALSE
ITEM_NAME VARCHAR(N) FALSE
RARITY INTEGER FALSE
PRICE INTEGER FALSE
  • ITEM_TREE ν…Œμ΄λΈ”μ€ λ‹€μŒκ³Ό κ°™μœΌλ©°, ITEM_ID, PARENT_ITEM_IDλŠ” 각각 μ•„μ΄ν…œ ID, PARENT μ•„μ΄ν…œμ˜ IDλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
     
Column name Type Nullable
ITEM_ID INTEGER FALSE
PARENT_ITEM_ID INTEGER TRUE
  • 단, 각 μ•„μ΄ν…œλ“€μ€ 였직 ν•˜λ‚˜μ˜ PARENT μ•„μ΄ν…œ ID λ₯Ό κ°€μ§€λ©°, ROOT μ•„μ΄ν…œμ˜ PARENT μ•„μ΄ν…œ ID λŠ” NULL μž…λ‹ˆλ‹€.

 

  • ROOT μ•„μ΄ν…œμ΄ μ—†λŠ” κ²½μš°λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

2) 문제

  • 더 이상 μ—…κ·Έλ ˆμ΄λ“œν•  수 μ—†λŠ” μ•„μ΄ν…œμ˜ μ•„μ΄ν…œ ID(ITEM_ID), μ•„μ΄ν…œ λͺ…(ITEM_NAME), μ•„μ΄ν…œμ˜ 희귀도(RARITY)λ₯Ό 좜λ ₯ν•˜λŠ” SQL 문을 μž‘μ„±ν•΄ μ£Όμ„Έμš”.

 

  • μ΄λ•Œ κ²°κ³ΌλŠ” μ•„μ΄ν…œ IDλ₯Ό κΈ°μ€€μœΌλ‘œ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ν•΄ μ£Όμ„Έμš”.

 

3) μ˜ˆμ‹œ

  • 예λ₯Ό λ“€μ–΄ ITEM_INFO ν…Œμ΄λΈ”μ΄ λ‹€μŒκ³Ό κ°™κ³ 
       
ITEM_ID ITEM_NAME RARITY PRICE
0 ITEM_A RARE 10000
1 ITEM_B RARE 9000
2 ITEM_C LEGEND 11000
3 ITEM_D RARE 10000
4 ITEM_E RARE 12000
  • ITEM_TREE ν…Œμ΄λΈ”μ΄ λ‹€μŒκ³Ό κ°™λ‹€λ©΄
   
ITEM_ID PARENT_ITEM_ID
0 NULL
1 0
2 0
3 1
4 1
  • 'ITEM_A' λŠ” 'ITEM_B', 'ITEM_C' 둜 μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•˜λ©° 'ITEM_B' λŠ” 'ITEM_D', 'ITEM_E' 둜 μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

  • 'ITEM_C', 'ITEM_D', 'ITEM_E' λŠ” 더 이상 μ—…κ·Έλ ˆμ΄λ“œκ°€ κ°€λŠ₯ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό 같이 λ‚˜μ™€μ•Ό ν•©λ‹ˆλ‹€.
     
ITEM_ID ITEM_NAME RARITY
4 ITEM_E RARE
3 ITEM_D RARE
2 ITEM_C LEGEND

4) 풀이

SELECT
    ITEM_ID,
    ITEM_NAME,
    RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT DISTINCT PARENT_ITEM_ID
                      FROM ITEM_TREE
                      WHERE PARENT_ITEM_ID IS NOT NULL)
ORDER BY ITEM_ID DESC;

 

[Reference]

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ λ§€μΉ­. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 λ§€μΉ­ λ°›μœΌμ„Έμš”.

programmers.co.kr

 

λ°˜μ‘ν˜•