Contains Duplicate - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
217๋ฒ ๋ฌธ์ ๋
nums๋ intํ ์ซ์์ ๋ฐฐ์ด์ด๊ณ ์ด ๋ฐฐ์ด์์ ๋ฐ๋ณต๋๋ ๊ฐ์ด ์์ ๋ true๋ฅผ ๋ฐํ
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ false๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค.
์ธ๋ป ๋ณด๊ธฐ์ ๋ฐฐ์ด์ ๋ชจ๋ ์๋ฅผ ํ์ํด์ผ ํ ๊ฒ ๊ฐ์ง๋ง
๊ทธ๋ ๊ฒ ํ๋ฉด ์๊ฐ ํจ์จ์ฑ ์ธก๋ฉด์์ ๋ฎ์ ์ ์๋ฅผ ๋ฐ์ ์ ๋ฐ์ ์์ต๋๋ค.
์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์ด์์ ์ค๋ณต๋ ๊ฐ์ ์ฐพ๊ธฐ ์ํด์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ๊ณผ ํจ์๋ฅผ ์จ์ผ ํ ์ง ์์๋ด ์๋ค.
1. ์์ํ ์ ํ ํ์
๋ง ๊ทธ๋๋ก ๋ฐฐ์ด์ ์ ํ ํ์ํฉ๋๋ค. ๊ฐ ์์๋ฅผ ํ๋์ฉ ๋น๊ตํ๋ฉฐ ๊ฐ์ ์๋ฅผ ์ฐพ์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐฐ์ด์ ๋ชจ๋ ์์ ํ์์ ๋๋ธ ๋ค ๊ฐ์ ์๊ฐ ์๋ค๋ฉด false๋ฅผ ๋ฐํํ๊ฒ ํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ด์ค for๋ฌธ์ด ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ O(n^2)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค. ๐
class Solution {
func containsDuplicate(_ nums: [Int]) -> Bool {
for i in 0..<nums.length {
for j in 0..<i {
if (nums[j] == nums[i]) {
return true
}
}
}
return false
}
}
์์ํ ์ ํ ํ์์ ๋ฐ์ดํฐ ๊ฐฏ์๊ฐ ๋ง์์ง ์๋ก ์ ์ ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค. ํจ์จ์ ์ธ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
2. ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๋ฐฐ์ด์ sort()๋ฅผ ์ด์ฉํด์ ๋ฐฐ์ด์ ์ ๋ ฌํ ์ ์์ต๋๋ค. ํฌ๊ธฐ ์์ผ๋ก ์ ๋ ฌ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋๋ ๊ฐ์ ์ฐพ์ผ๋ ค๋ฉด ์์ ์ ์์ด๋ ๋ค์ ์๋ ๋ฐฐ์ด๊ณผ ๋น๊ต ํ์ฌ ์ค๋ณตํ๋์ง ์์๋ณด๋ฉด ๋ฉ๋๋ค. ์ด๋ ์ฃผ์ํ ์ ์ ๋ฐฐ์ด ์ธ๋ฑ์ค ๋ฒ์๊ฐ ๋ฒ์ด๋์ง ์๋๋ก ์ฃผ์ ํด์ผ ํฉ๋๋ค. heapsort๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ณต๊ฐ ๋ณต์ก๋๋ O(1), sort()๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ ๋ณต์ก๋๋ O(n log n) ์ ๋๋ค.
class Solution {
func containsDuplicate(_ nums: [Int]) -> Bool {
var arr = nums
arr.sort()
if arr.count <= 1 {
return false
}
for i in 0..<(arr.count-1) {
if (arr[i] == arr[i+1]) {
return true
}
}
return false
}
}
์ฐธ๊ณ ๋ก ๋ฐฐ์ด์ min()๊ณผ max()๋ O(n)์ ๊ฐ์ง๋๋ค.
3. Set
set์ ์งํฉ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋๋ฐ ์ดํ ์ ์ด๋ผ ๋ถ๋ฅด๊ฒ ์ต๋๋ค. ํ์๊ณผ ์ฝ์ ์ ๋ ฌ์์ ํด์ ํ ์ด๋ธ๊ณผ ์ด์ง ํธ๋ฆฌ๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์์ ์ค๋ณต๋ ๊ฐ์ ์ฐพ๊ธฐ ์ํด Hashtable์ ์ด์ฉํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ์ค์ํํธ์์ Set๊ณผ Dictionary๋ Hashable์ ์์ ๋ฐ๊ณ ์์ต๋๋ค. Set๊ณผ Dictionary๋ ์ค๋ณต์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋์ง ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๊ณ ์ฐพ๋ ์๋ ๋ํ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๋จ, ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ฐจ๋๋ก ์ฝ์ด์์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ ์ฌ์ฉํ์ง ์๋๋ก ์ฃผ์ ํด์ผ ํฉ๋๋ค.
class Solution {
func containsDuplicate(_ nums: [Int]) -> Bool {
if (nums.count <= 1) {
return false
}
var numSet = Set(nums)
for i in nums {
if numSet.contains(i) {
return true
} else {
numSet.insert(i)
}
}
return false
}
}
contains()๋ ์ธ์๋ก ๋ฐ์ ๊ฐ์ด ํด๋น ์ ์ ์๋์ง ํ์ธํฉ๋๋ค. O(n)์ด๋ฉฐ ์ด๋ณด๋ค ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด์๋ count๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. count๋ O(1) ์ ๋๋ค.
class Solution {
func containsDuplicate(_ nums: [Int]) -> Bool {
if nums.count == 1 {
return false
}
if nums.count != Set(nums).count {
return true
}
return false
}
}
Set์ผ๋ก ๋ฐฐ์ด์ ๋ฐ์ผ๋ฉด ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋ ๊ฐ์ด ์๋ ๋ฐฐ์ด๊ณผ ๊ฐฏ์๊ฐ ๋ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก. HashTable
ํด์ ํ ์ด๋ธ์ value์ key๋ฅผ ๊ฐ์ง๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด ์ ๋๋ค. ๋์ ๋๋ฆฌ ์ฐ์ฐ์ ๋ณดํต O(1)์ ๊ฐ์ง๊ฒ ๋๋๋ฐ ์ด๋ ์์ ์ฐ์ฐ๊ณผ ๊ฐ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ์ฆ ๋ฐ์ดํฐ๊ฐ ์ ์ฐํ๊ฒ ์ฆ๊ฐํ๊ณ ์ค์ด๋ ๋ค๊ณ ํด๋ ๋ณดํต์ ์ผ๋ก ๊ฐ์ ์๊ฐ์ ์ฐ์ฐ ์๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ด๋ ์ฃผ์ํด์ผ ํ๋ ๊ฒ์ ํด์ ์ถฉ๋์ ๋๋ค. ๋ค๋ฅธ ๊ฐ์ด input๋์์ง๋ง ๊ฐ์ hash ๊ฐ์ ๊ฐ์ง๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ ํด์ ๊ฐ์ ๊ฐ์ง๋ ์ธ์คํด์ค๊ฐ ๊ฐ๋ค๋ ๋ป์ ์๋๋๋ค! ํด์ ์ถฉ๋์ ํ๋์ key๊ฐ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ ์๋ฏธ๋ก ๋ณผ ์ ์๋๋ฐ ์ด๋ ๊ฒ ๋๋ฉด ๊ณ ์ ์ ๊ฐ์ ์ฐพ๋ ๊ฒ์์ ์ด์ ์ด ์ค์ด๋ค ์ ์์ต๋๋ค. ์ฆ ํด์์ถฉ๋์ด ๋น๋ฒํ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด Swift์์๋ hasher๋ผ๋ ๊ฒ์ด ์์ต๋๋ค.
๐ํ๋ฆฌ๊ฑฐ๋ ์ ๋ชป๋ ๋ด์ฉ ์ง์ ์ธ์ ๋ ํ์์ ๋๋ค~ ๋๊ธ ๋ถํ๋๋ ค์!
'๐ Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[leetCode] 13. 3Sum (์๊ณ ๋ฆฌ์ฆ, ์๋ฆฌ) with Swift (0) | 2020.11.04 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ฃผํ์ง ๋ชปํ ์ ์ with python (feat. hash) (0) | 2020.10.13 |
[leetCode] 152. Maximum Product Subarray ์นด๋จ ์๊ณ ๋ฆฌ์ฆ์ ๋ณํ (0) | 2020.10.12 |
[leetCode] 53. Maximum Subarray with Swift ์นด๋จ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฝ๊ฒ ๊ตฌํ๊ธฐ (0) | 2020.10.06 |
์ค์ฝ๋น ์ง์ (0) | 2020.08.03 |
๋๊ธ