์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ํ๋ IT&E
- URN
- FACTORY
- http method
- reflection
- fontstyle
- di
- IOC
- AndroidStudio
- ๊ธฐ์ด100์
- uri
- OpenAPI
- udp
- Android Studio
- Kotlin
- swagger
- Dialog
- tcp
- 2024-08-21
- Python
- menutab
- OOP
- 2024-08-20
- url
- ์ด๋ ธํ ์ด์
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ
- Factory Method Pattern
- datepicker
- ์ฝ๋์
- ์ฑ์ฉํ์ ํ
dingdong coding
[ ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ ] ์ ๋ ฌ ๋ณธ๋ฌธ
[ ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ ] ์ ๋ ฌ
๐ถ ๊ฐ๋ฐ๊ฐ๋ฐ ๐พ 2022. 3. 23. 01:51
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
โฃ ์ ๋ ฌ(Sorting) : ๋ฐ์ดํฐ๋ฅผ ํน์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ ์์๋๋ก ๋์ดํ๋ ๊ฒ
โฃ ์ ํ์ ๋ ฌ(Selection Sort) : ์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ๋งจ ์์ ์๋ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ฐ๋ณต
# ์ ํ์ ๋ ฌ ์์ค์ฝ๋
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(len(array)):
min_index = i # ๊ฐ์ฅ ์์ ์์์ ์ธ๋ฑ์ค
for j in range(i + 1, len(array)):
if array[min_index] > array[j]:
min_index = j
array[i], array[min_index] = array[min_index], array[i] #์ค์ํ
print(array)
์ ํ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋ : O(N²)
โฃ ์ฝ์ ์ ๋ ฌ(Insertion Sort) : ์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ๊ณจ๋ผ ์ ์ ํ ์์น์ ์ฝ์
# ์ฝ์
์ ๋ ฌ ์์ค์ฝ๋
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(1, len(array)):
for j in range(i, 0, -1): #์ธ๋ฑ์ค i๋ถํฐ 1๊น์ง ๊ฐ์ํ๋ฉฐ ๋ฐ๋ณตํ๋ ๋ฌธ๋ฒ
if array[j] < array[j-1]: #ํ ์นธ์ฉ ์ผ์ชฝ์ผ๋ก ์ด๋
array[j], array[j-1] = array[j-1], array[j]
else: # ์๊ธฐ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ฉด ๊ทธ ์์น์์ ๋ฉ์ถค
break
print(array)
์ฝ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋ : O(N²), ์ต์ ์ ๊ฒฝ์ฐ O(N)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง
โฃ ํต ์ ๋ ฌ(quick sort)
- ๊ธฐ์ค ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๊ณ ๊ทธ ๊ธฐ์ค๋ณด๋ค ํฐ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ
- ์ผ๋ฐ์ ์ธ ์ํฉ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋
- ๋ณํฉ ์ ๋ ฌ๊ณผ ๋๋ถ์ด ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ทผ๊ฐ์ด ๋๋ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํต ์ ๋ ฌ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค ๋ฐ์ดํฐ(Pivot)๋ก ์ค์
ํต ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋ : O(NlogN), ์ต์ ์ ๊ฒฝ์ฐ O(N²)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง
# ํต ์ ๋ ฌ ์์ค์ฝ๋
array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
def quick_sort(array, start, end):
if start >= end: # ์์๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ ์ข
๋ฃ
return
pivot = start # ํผ๋ฒ์ ์ฒซ ๋ฒ์งธ ์์
left = start + 1
right = end
while left <= right:
# ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณต
while left <= end and array[left] <= array[pivot]:
left += 1
# ํผ๋ฒ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณต
while right > start and array[right] >= array[pivot]:
right -= 1
if left > right: # ์๊ฐ๋ ธ๋ค๋ฉด ์์ ๋ฐ์ดํฐ์ ํผ๋ฒ์ ๊ต์ฒด
array[right], array[pivot] = array[pivot], array[right]
else: # ์๊ฐ๋ฆฌ์ง ์์์๋ฉด ์์ ๋ฐ์ดํฐ์ ํฐ ๋ฐ์ดํฐ๋ฅผ ๊ต์ฒด
array[left], array[right] = array[right], array[left]
# ๋ถํ ์ดํ ์ผ์ชฝ ๋ถ๋ถ์ ์ค๋ฅธ์ชฝ ๋ถ๋ถ์์ ๊ฐ๊ฐ ์ ๋ ฌ ์ํ
quick_sort(array, start, right-1)
quick_sort(array, right+1, end)
quick_sort(array, 0, len(array)-1)
print(array)
# ํต ์ ๋ ฌ ์์ค์ฝ๋
array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
def quick_sort(array):
# ๋ฆฌ์คํธ ํ๋ ์ดํ์ ์์๋ง์ ๋ด๊ณ ์๋ค๋ฉด ์ข
๋ฃ
if len(array) <= 1:
return array
pivot = array[0] # ํผ๋ฒ์ ์ฒซ ๋ฒ์งธ ์์
tail = array[1:] # ํผ๋ฒ์ ์ ์ธํ ๋ฆฌ์คํธ
# ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
์ฌ์ฉ
left_side = [x for x in tail if x <= pivot] # ๋ถํ ๋ ์ผ์ชฝ ๋ถ๋ถ
right_side = [x for x in tail if x > pivot] # ๋ถํ ๋ ์ค๋ฅธ์ชฝ ๋ถ๋ถ
# ๋ถํ ์ดํ ์ผ์ชฝ ๋ถ๋ถ๊ณผ ์ค๋ฅธ์ชฝ ๋ถ๋ถ์์ ๊ฐ๊ฐ ์ ๋ ฌ์ ์ํํ๊ณ , ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ๋ฐํ
return quick_sort(left_side) + [pivot] + quick_sort(right_side)
print(quick_sort(array))
โฃ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๋น๊ตํ๊ธฐ
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ | ํ๊ท ์๊ฐ ๋ณต์ก๋ | ๊ณต๊ฐ ๋ณต์ก๋ | ํน์ง |
์ ํ ์ ๋ ฌ | O(N²) | O(N) | ์์ด๋์ด๊ฐ ๋งค์ฐ ๊ฐ๋จ |
์ฝ์ ์ ๋ ฌ | O(N²) | O(N) | ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์์ ๋ ๊ฐ์ฅ ๋น ๋ฆ |
ํต ์ ๋ ฌ | O(NlogN) | O(N) | ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ์ ํฉํ๋ฉฐ, ์ถฉ๋ถํ ๋น ๋ฆ |
โฃ ๊ณ์ ์ ๋ ฌ(count sort)
- ํน์ ์กฐ๊ฑด์ด ๋ถํฉํ ๋๋ง ์ฌ์ฉํ ์ ์์ง๋ง ๋งค์ฐ ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ์ฐจ์ด๊ฐ 1,000,000์ ๋์ง ์์ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ
→ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์์ ๋์ ํํด์ ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๋งค์ฐ ๋ง๋๋ผ๋ ๋น ๋ฅด๊ฒ ๋์
→ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๋ง์ด ์ค๋ณต๋์ด ์์์๋ก ์ ๋ฆฌ
# ๊ณ์์ ๋ ฌ ์์ค์ฝ๋
# ๋ชจ๋ ์์์ ๊ฐ์ด 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๊ณ ๊ฐ์
array = [7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2]
# ๋ชจ๋ ๋ฒ์๋ฅผ ํฌํจํ๋ ๋ฆฌ์คํธ ์ ์ธ(๋ชจ๋ ๊ฐ์ 0์ผ๋ก ์ด๊ธฐํ)
count = [0] * (max(array) + 1)
for i in range(len(array)):
count[array[i]] += 1 # ๊ฐ ๋ฐ์ดํฐ์ ํด๋นํ๋ ์ธ๋ฑ์ค์ ๊ฐ ์ฆ๊ฐ
for i in range(len(count)): # ๋ฆฌ์คํธ์ ๊ธฐ๋ก๋ ์ ๋ ฌ ์ ๋ณด ํ์ธ
for j in range(count[i]):
print(i, end=' ') # ๋์ด์ฐ๊ธฐ๋ฅผ ๊ตฌ๋ถ์ผ๋ก ๋ฑ์ฅํ ํ์๋งํผ ์ธ๋ฑ์ค ์ถ๋ ฅ
๊ณ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋ : O(N+K)
๊ณ์ ์ ๋ ฌ์ ๊ณต๊ฐ ๋ณต์ก๋ : O(N+K)
1. ์์์ ์๋๋ก (์ค์ ๋ฌธ์ )
2. ์ฑ์ ์ด ๋ฎ์ ์์๋ก ํ์ ์ถ๋ ฅํ๊ธฐ (์ค์ ๋ฌธ์ )
3. ๋ ๋ฐฐ์ด์ ์์ ๊ต์ฒด (์ค์ ๋ฌธ์ )
[ ์ค์ ๋ฌธ์ ] ์์์ ์๋๋ก
โป ๋ฌธ์
ํ๋์ ์์ด์๋ ๋ค์ํ ์๊ฐ ์กด์ฌํ๋ค. ์ด๋ฌํ ์๋ ํฌ๊ธฐ์ ์๊ด์์ด ๋์ด๋์ด ์๋ค. ์ด ์๋ฅผ ํฐ ์ ๋ถํฐ ์์ ์์ ์์๋ก ์ ๋ ฌํด์ผ ํ๋ค. ์์ด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋์์ค.
์ ๋ ฅ์กฐ๊ฑด
- ์ฒซ์งธ ์ค์ ์์ด์ ์ํด์๋ ์์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค.
- ๋์งธ ์ค ๋ถํฐ N+1๋ฒ์งธ ์ค๊น์ง N๊ฐ์ ์๊ฐ ์ ๋ ฅ๋๋ค. ์์ ๋ฒ์๋ 1์ด์ 100,000 ์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ์กฐ๊ฑด
- ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์์ด์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ถ๋ ฅํ๋ค. ๋์ผํ ์์ ์์๋ ์์ ๋กญ๊ฒ ์ถ๋ ฅํด๋ ๊ด์ฐฎ๋ค.
# ์์์ ์๋๋ก
n = int(input())
array = []
for i in range(n):
array.append(int(input()))
array = sorted(array, reverse=True)
for i in array:
print(i, end=' ')
[ ์ค์ ๋ฌธ์ ] ์ฑ์ ์ด ๋ฎ์ ์์๋ก ํ์ ์ถ๋ ฅํ๊ธฐ
โป ๋ฌธ์
N๋ช ์ ํ์ ์ ๋ณด๊ฐ ์๋ค. ํ์ ์ ๋ณด๋ ํ์์ ์ด๋ฆ๊ณผ ํ์์ ์ฑ์ ์ผ๋ก ๊ตฌ๋ถ๋๋ค. ๊ฐ ํ์์ ์ด๋ฆ๊ณผ ์ฑ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋ ์ฑ์ ์ด ๋ฎ์ ์์๋๋ก ํ์์ ์ด๋ฆ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ์กฐ๊ฑด
- ์ฒซ์งธ ์ค์ ํ์์ ์ N์ด ์ ๋ ฅ๋๋ค.
- ๋์งธ ์ค ๋ถํฐ N+1๋ฒ์งธ ์ค์๋ ํ์์ ์ด๋ฆ์ ๋ํ๋ด๋ ๋ฌธ์์ด A๊ณผ ํ์์ ์ฑ์ ์ ๋ํ๋ด๋ ์ ์ B๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ฌธ๋์ด ์ ๋ ฅ๋๋ค. ๋ฌธ์์ด A์ ๊ธธ์ด์ ํ์์ ์ฑ์ ์ 100์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ์กฐ๊ฑด
- ๋ชจ๋ ํ์์ ์ด๋ฆ์ ์ฑ์ ์ด ๋ฎ์ ์์๋๋ก ์ถ๋ ฅํ๋ค. ์ฑ์ ์ด ๋์ผํ ํ์๋ค์ ์์๋ ์์ ๋กญ๊ฒ ์ถ๋ ฅํด๋ ๊ด์ฐฎ๋ค.
# ์ฑ์ ์ด ๋ฎ์ ์์๋ก ํ์ ์ถ๋ ฅํ๊ธฐ
n = int(input())
array = []
for i in range(n):
input_data = input().split()
array.append((input_data[0], int(input_data[1])))
def setting(data):
return data[1]
student = sorted(array, key=setting)
result = [x[0] for x in student]
for i in result:
print(i, end=' ')
[ ์ค์ ๋ฌธ์ ] ๋ ๋ฐฐ์ด์ ์์ ๊ต์ฒด
โป ๋ฌธ์
๋๋น์ด๋ ๋ ๊ฐ์ ๋ฐฐ์ด A์ B๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ ๋ฐฐ์ด์ N๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๋ฐฐ์ด์ ์์๋ ๋ชจ๋ ์์ฐ์์ด๋ค.
๋๋น์ด๋ ์ต๋ K๋ฒ์ ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ ์ํํ ์ ์๋๋ฐ, ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ด๋ ๋ฐฐ์ด A์ ์๋ ์์ ํ๋์ ๋ฐฐ์ด B์ ์๋ ์์ ํ๋๋ ๊ณจ๋ผ์ ๋ ์์๋ฅผ ์๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๋งํ๋ค. ๋๋น์ด์ ์ต์ข ๋ชฉํ๋ ๋ฐฐ์ด A์ ๋ชจ๋ ์์์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ํ๋ ๊ฒ์ด๋ฉฐ, ์ฌ๋ฌ๋ถ์ ๋๋น์ด๋ฅผ ๋์์ผ ํ๋ค.
N, K ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด A์ B์ ์ ๋ณด๋ค ์ฃผ์ด์ก์ ๋, ์ต๋ K๋ฒ์ ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ ์ํํ์ฌ ๋ง๋ค ์ ์๋ ๋ฐฐ์ด A์ ๋ชจ๋ ์์์ ํฉ์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ์กฐ๊ฑด
- ์ฒซ ๋ฒ์งธ ์ค์ N, K๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค.
- ๋ ๋ฒ์งธ ์ค์ ๋ฐฐ์ด A์ ์์๋ค์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค. ๋ชจ๋ ์์๋ 10,000,000๋ณด๋ค ์์ ์์ฐ์์ด๋ค.
- ์ธ ๋ฒ์ฌ ์ค์ ๋ฐฐ์ด B์ ์์๋ค์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ ๋ ฅ๋๋ค. ๋ชจ๋ ์์๋ 10,000,000๋ณด๋ค ์์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ์กฐ๊ฑด
- ์ต๋ K๋ฒ์ ๋ฐ๊ฟ์น๊ธฐ ์ฐ์ฐ์ ์ํํ์ฌ ๋ง๋ค ์ ์๋ ๋ฐฐ์ด A์ ๋ชจ๋ ์์์ ํฉ์ด ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
# ๋ ๋ฐฐ์ด์ ์์ ๊ต์ฒด
n, k = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort()
b.sort(reverse=True)
for i in range(k):
if a[i] < b[i]:
a[i], b[i] = b[i], a[i]
else:
break
print(sum(a))
๊ฐ์ ๋ฐ ์ฐธ์กฐ
'๐ตCoding Test > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ ] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2022.04.29 |
---|---|
[ ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ ] ์ด์ง ํ์ (0) | 2022.03.23 |
[ ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ ] DFS/BFS (0) | 2022.03.21 |
[ ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ ] Implementaion (0) | 2022.02.25 |
[ ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค with ํ์ด์ฌ ] Greedy (0) | 2022.02.08 |