๋ชฉ์ฐจ
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
์ ํ์ ๋ ฌ
: ์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ ์ค์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ๋งจ ์์ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ฐ๋ณต
๋งค๋ฒ ํ์ฌ ๋ฒ์์์ ์ ์ผ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ณจ๋ผ์ ์ ์ผ ์์ชฝ์ผ๋ก ๋ณด๋ด์ฃผ๋ ์ ๋ ฌ๋ฐฉ๋ฒ!
step : ์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ ไธญ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ์ฌ ๊ฐ์ฅ ์์ ์๊ณผ ๋ฐ๊ฟ์ค๋ค.
step0 : ์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ ไธญ ๊ฐ์ฅ ์์ 0์ ์ ํํ์ฌ ๊ฐ์ฅ ์์ 7๊ณผ ๋ฐ๊ฟ์ค๋ค.
์ด ๋ ์ฒ๋ฆฌ ๋์ง ์์ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ ์ ์ฒด ๋ฒ์๋ฅผ ๋งํจ.
- ํ์ ๋ฒ์๋ ๋งค๋ฒ ์ค์ด๋ ๋ค.
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)
๐กpython์ swap ๋ฐฉ๋ฒ
๊ฐ์ ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ๋ฒ์์ temp ์ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ๋ก ๋ฐ๊ฟ์ค ์ ์๋ค.
array[i] , array[min_index] = array[min_index] , array[i]
์ฝ์ ์ ๋ ฌ
์ฒ๋ฆฌ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ๊ณจ๋ผ ์ ์ ํ ์์น์ ์ฝ์ ํ๋ ๋ฐฉ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
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): # ์ผ์ชฝ์ผ๋ก ์ด๋
if array[j] < array[j-1]:
array[j],array[j-1] = array[j-1],array[j]
else:
break
print(array)
ํต ์ ๋ ฌ
array = [5,7,9,0,3,1,6,2,4,8]
# ํต ์ ๋ ฌ์ ์ฌ๊ท์ ์ธ ๋ฐฉ์์ผ๋ก ๋์!
def quick_sort(array, start,end):
# ์ข
๋ฃ ์กฐ๊ฑด
if start >= end : # ์์๊ฐ ํ๊ฐ์ธ ๊ฒฝ์ฐ
return
pivot = start
left = start+1
right = end
# left์ right๊ฐ ์๊ฐ๋ฆฐ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ๋๋ก ํ๋ค.
while(left <= right):
# ์ผ์ชฝ์์๋ถํฐ pivot๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
while (left <=end and array[left] <= array[pivot]):
left +=1
# ์ค๋ฅธ์ชฝ์์๋ถํฐ pivot๋ณด๋ค ์์๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
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))
๊ณ์ ์ ๋ ฌ
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[j]):
print(i,end=' ')
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๋น๊ต
*๋ค๋ง ํต ์ ๋ ฌ์ ๋ฐ์ดํฐ ์ ๋ ฌ ๋ฐฉ์์ ๋ฐ๋ผ์ ์ต์ ์ ๊ฒฝ์ฐ o(N^2)์ด ๋์ฌ ์ ์์
* random ํ ๊ฐ์ ์ฌ์ฉํ๋ค.
* ํ์ด์ฌ ๊ธฐ๋ณธ : ๋ณํฉ์ ๋ ฌ์ ๊ธฐ๋ณธ์ผ๋กํ๋ ํ์ด๋ธ๋ฆฌ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
1๏ธโฃ์ค์ ๋ฌธ์ 1 : ์์์ ์๋๋ก
๐ก๋ฐฐ์ด ๋ด์ฉ : ํ์ด์ฌ์ sorted
- ํ์ด์ฌ์ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ sorted์ ๋ํด์ ์๊ฒ๋์๋ค.
- ์ฌ์ฉ๋ฒ
sorted๋ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์จ ์ดํฐ๋ฌ๋ธํ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด์ ๋ฐํํด์ฃผ๋ ํจ์์ด๋ค!
์ฌ๊ธฐ์ ์ดํฐ๋ฌ๋ธํ ๋ฐ์ดํฐ๋ ๋ฐ๋ณต๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค.
array = sorted(array,reverse=True)
- sorted(์ ๋ ฌํ ๋ฐ์ดํฐ)
list.sort( ) ์์ ์ฐจ์ด
sort๋ ๋ฆฌ์คํธ์์๋ง ์ ์๋๋ค. ๊ทธ๋ฌ๋ sorted๋ ๋ชจ๋ ๋ฐ๋ณต๊ฐ๋ฅํ ๋ฐ์ดํฐ์์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค!
- sorted(์ ๋ ฌํ ๋ฐ์ดํฐ , key= ์ ๋ ฌ ๊ธฐ์ค )
key๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ๊ฒ์ธ์ง๋ฅผ ๋ํ๋ธ๋ค.
- sorted(์ ๋ ฌํ ๋ฐ์ดํฐ, reverse=์ค๋ฆ์ฐจ์(False) ๋๋ ๋ด๋ฆผ์ฐจ์(True))
reverse๋ ์ค๋ฆ์ฐจ์๊ณผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์ง์ ํ๋๋ฐ ์ฌ์ฉํ๋ค.
- sorted(์ ๋ ฌํ ๋ฐ์ดํฐ, key= ์ ๋ ฌ ๊ธฐ์ค , reverse = ์ค๋ฆ์ฐจ์(False) ๋๋ ๋ด๋ฆผ์ฐจ์(True) )
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=' ')
2๏ธโฃ์ค์ ๋ฌธ์ 2 : ์ฑ์ ์ด ๋ฎ์ ์์๋ก ํ์ ์ถ๋ ฅํ๊ธฐ
(์ด๋ฆ ์ฑ์ ) ๋ฌถ์์์ ์ฑ์ ์ผ๋ก ์ ๋ ฌ์ ์ํํ๊ณ ์ด๋ฆ์ ์ถ๋ ฅํด์ผํ๋ค.
n = int(input())
array = []
for i in range(n):
input_data = input().split()
array.append((input_data[0],int(input_data[1])))
print(array)
array = sorted(array,key= lambda student : student[1])
for student in array:
print(student[0], end=' ')
๐ญ๋๋ค๋ฌธ๋ฒ ์ด๋ป๊ฒ ์ฐ๋๊ฑฐ์ผ?!?
์ฐ์ ๋๋ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ฝ๋๋ฅผ ํ์ด์ ์ดํดํด๋ณด์๋ค.
n = int(input())
def get_score(student):
return student[1]
array = []
for i in range(n):
input_data = input().split()
array.append((input_data[0],int(input_data[1])))
print(array)
array = sorted(array,key= get_score)
for student in array:
print(student[0], end=' ')
๐กsorted์์ key์ ๋ฐ๋ผ ์ ๋ ฌ๋๋ ์๋ฆฌ๋ฅผ ์์๋ณด์!
key๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด
ํ์ ๋ฆฌ์คํธ [ (์ด๋ฆ1, 80), (์ด๋ฆ2, 90), (์ด๋ฆ3, 75) ]์ ๋น๊ตํด์ ์ ๋ ฌํ๊ฒ ๋๋ค.
ํํ๋ผ๋ฆฌ์ ๋น๊ต๋ ์ฒซ๋ฒ์งธ ์์๋ถํฐ ์์๋๋ก ๋น๊ตํ๋ฏ๋ก ์ด๋ฆ ์์ผ๋ก ์ ๋ ฌ๋๋ค.
๊ทธ๋ฌ๋ keyํจ์๋ฅผ ์ง์ ํ๋ฉด ๊ฐ ์์์ ๋ํด key์ ์ง์ ํ lambda x:x[1] ํจ์๋ฅผ ํธ์ถํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์ ๋ ฌ์ ์ํํ๋ค.
* (์ด๋ฆ1, 80)์ ๋ํด์๋ 80์ ๋ฐํ
* (์ด๋ฆ2, 90)์ ๋ํด์๋ 90์ ๋ฐํ
* (์ด๋ฆ3, 75)์ ๋ํด์๋ 75๋ฅผ ๋ฐํ
๋ฐ๋ผ์ sorted๋ 80,90,75 ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ์ํํ๊ฒ ๋๋ค!
๐ก๋๋ค๋ฅผ ์ ์ฉํด๋ณด์
array = sorted(array,key= lambda student : student[1])
array์ ๋ํด์ ์ฒซ๋ฒ์งธ ์์๋ถํฐ ๋๋ค์ ๋งค๊ฐ๋ณ์์ธ student์ ๋ค์ด๊ฐ์ student[1]์ด๋ผ๋ ๊ฐ์ผ๋ก ๋ฐํ๋๋ค.
๋ฐ๋ผ์ (์ด๋ฆ1, 80)์ธ ์ฒซ๋ฒ์งธ ์์๊ฐ ๋๋คํจ์์ ๋ค์ด๊ฐ๋ฉด stduent[1]์ธ 80์ด ๋ฐํ๋๋ ๊ฒ์ด๋ค
๊ฒฐ๊ณผ์ ์ผ๋ก ์๋์ ๊ฐ์ด ๊ฐ์ ๋ฐํํ๊ฒ ๋๋ค
* (์ด๋ฆ1, 80)์ ๋ํด์๋ 80์ ๋ฐํ
* (์ด๋ฆ2, 90)์ ๋ํด์๋ 90์ ๋ฐํ
* (์ด๋ฆ3, 75)์ ๋ํด์๋ 75๋ฅผ ๋ฐํ
3๏ธโฃ์ค์ ๋ฌธ์ 3 : ๋ ๋ฐฐ์ด์ ์์ ๊ต์ฒด
n,k = map(int,input().split())
A = []
B = []
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:
continue
print(sum(A))
๐กpython์ continue์ break์ ์ฐจ์ด
python์์ continue์ break์ ์ฐจ์ด๋ฅผ ์ ๋ฆฌํ์
๋๋ A์ ์์๋ณด๋ค B์ ์์๊ฐ ํด ๋๋ง ์๋ก ์์๋ฅผ ๊ต์ฒดํ๋๋ก ํ์๊ณ , ์๋ ๊ฒฝ์ฐ์๋ ๋ค์ for๋ฌธ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๋ค๋ ๋ชฉ์ ์ผ๋ก continue๋ฅผ ์ฌ์ฉํ์๋ค.
continue : ๋ฐ๋ณต๋ฌธ ์์์ ํ์ฌ ๋ฐ๋ณต์ ๊ฑด๋๋ฐ๊ณ ๋ค์ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๋ค.
for i in range(5):
if i == 2:
continue
print(i)
i๊ฐ 2์ธ ๊ฒฝ์ฐ continue๋ฅผ ๋ง๋๋ฉด ๊ทธ ๋ฐ๋ณต์ ๊ฑด๋๋ฐ๊ณ ๋ค์ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ 0 1 3 4 ๊ฐ ๋๋ค.
break : ๋ฐ๋ณต๋ฌธ ์ ์ฒด๋ฅผ ์์ ํ ๋น ์ ธ๋์จ๋ค!
for i in range(5):
if i == 2:
break
print(i)
i๊ฐ 2์ธ ๊ฒฝ์ฐ break๋ฅผ ๋ง๋๊ณ , ๋ฐ๋ณต๋ฌธ ์ ์ฒด๋ฅผ ์์ ํ ๋น ์ ธ๋์ค๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ถ๋ ฅ๊ฒฐ๊ณผ๋ 0 1 ์ด ๋๋ค.
์ฐ์ , A์ ์์๋ณด๋ค B์ ์์๊ฐ ์์ ๋๋ ๊ต์ฒด๋ฅผ ํ์ง ์๊ณ ๋ค์ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๋ค๋ ๋ชฉ์ ์์ continue๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ ์ ํ์๋ค.
ํ์ง๋ง A๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ, B๋ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด ๋ ์ํ์ด๋ค.
๋ฐ๋ผ์ ๋ง์ฝ ํน์ i ์ธ๋ฑ์ค์์ A๊ฐ B๋ณด๋ค ์ปธ์ ๊ฒฝ์ฐ B์ ์ดํ ์์๋ A์ ์์๋ณด๋ค ์์ ๊ฒ์ด๋ค!!
๋ฐ๋ผ์ ๋์ด์ ๋ฐ๋ณต๋ฌธ์ ์ํํ ํ์๊ฐ ์๊ณ break๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ์ ํ๋ค.
์์ ํ ์ฝ๋
n,k = map(int,input().split())
A = []
B = []
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))
์๊ฐ ๊ณผ์
์ ์ฌ์ง์ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ ์๊ฐ ๊ณผ์ ์ ์ ์ด๋ณธ ๋ด์ฉ์ด๋ค.
- ์๊ฐ 1 ์ ๊ฒฝ์ฐ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํผ ์๋ฆฌ์๋ค.
- ์๊ฐ 2 ๋ A์ B์ ๊ฐ๋ค์ด ๋์ค๋ ๊ฐ์๋ฅผ ํ์ ํ์ฌ ๊ณ์ ์ ๋ ฌ๋ก ํ ์ ์์๊น? ํ๋ ์๊ฐ์ด์๋ค.
๊ทธ๋ฌ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๋ผ ๊ฐ์ ๋ฒ์๊ฐ ๊ฒฐ์ ๋๋ค๋ ์ ์์ ๊ฐ ๋ฒ์๋ฅผ ์์ธกํ ์ ์์ด ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋จํ์๋ค.