LEETCODE_619. Biggest Single Number

ginoyยท2023๋…„ 5์›” 10์ผ
0
post-thumbnail

๐Ÿ“ข ๋ณธ ๊ฒŒ์‹œ๊ธ€์—์„œ ํ™œ์šฉ๋˜๋Š” ๋ฌธ์ œ์˜ ์ถœ์ฒ˜๋Š” LEETCODE์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค.

๐Ÿ“๋ฌธ์ œ : https://leetcode.com/problems/biggest-single-number/

๐Ÿ’ฌ ํ’€์ด

๐Ÿ” ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ

์กฐ๊ฑด 1. ๊ฐ€์žฅ ํฐ single number๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ
์กฐ๊ฑด 2. ๋งŒ์•ฝ, single number๊ฐ€ ์—†๋‹ค๋ฉด, NULL ์ถœ๋ ฅํ•˜๊ธฐ

๊ฐ„๋‹จํ•˜๊ฒŒ single number๋งŒ HAVING์ ˆ์˜ COUNT()๋กœ ์„ธ๊ณ , MAX() ๋˜๋Š” ORDER BY & LIMIT ์กฐํ•ฉ์œผ๋กœ ํ’€๋ฉด ๋  ๊ฒƒ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋‚œ๊ด€์— ๋ถ€๋”ชํžˆ๋Š” ์ง€์ ์€ Example.2์ฒ˜๋Ÿผ single number๊ฐ€ ์—†์„ ๋•Œ, null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์œ„์™€ ๊ฐ™์ด ๋งŒ์•ฝ์— HAVING์ ˆ๊ณผ ORDER BY, LIMIT๋กœ ํ’€๋ฉด ์‚ฌ์ง„์ฒ˜๋Ÿผ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

SELECT IF(COUNT(*) = 1, num, null) num
FROM mynumbers 
GROUP BY num 
 HAVING COUNT(*) = 1
ORDER BY num DESC 
LIMIT 1 

์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์˜ ์ฟผ๋ฆฌ์—์„œ HAVING์ ˆ์„ ๋นผ์•ผํ•œ๋‹ค.

SQL์ฟผ๋ฆฌ๋Š” FROMโ†’ONโ†’JOINโ†’WHEREโ†’GROUP BYโ†’HAVINGโ†’SELECTโ†’DISTINCTโ†’ORDER BYโ†’LIMIT ์ด ์ˆœ์œผ๋กœ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— HAVING์ ˆ์—์„œ COUNT(*) = 1์ธ row๋งŒ ๊ฑธ๋Ÿฌ๋†“์€ ์ƒํƒœ์—์„œ IF์ ˆ์˜ ์กฐ๊ฑด์€ single number๊ฐ€ ์˜๋ฏธ๊ฐ€ ์—†๋Š” ์กฐ๊ฑด์ด ๋˜๋ฒ„๋ฆฐ๋‹ค(=์ˆซ์ž๋„ NULL๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ).

๋”ฐ๋ผ์„œ, ์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •ํ•˜๋ ค๋ฉด HAVING์ ˆ์„ ์ œ์™ธํ•ด์•ผํ•˜๊ณ , ๋งŒ์•ฝ HAVING์„ ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

SELECT MAX(num) as num 
FROM (SELECT num 
	  FROM mynumbers
      GROUP BY num 
       HAVING COUNT(num) = 1
      ) AS single_numbers  

์œ„ ์ฟผ๋ฆฌ์—์„œ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ HAVING์ ˆ๋กœ single numbers๋ฅผ ๋‹ค ๊ฑธ๋Ÿฌ๋‘๊ณ , ๊ฑฐ๊ธฐ์„œ MAX()๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
๋งŒ์•ฝ, ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด MAX()๋Š” NULL์„ ์ถœ๋ ฅํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€