[์ด์ฝ”ํ…Œ python] ์ •๋ ฌ - ์„ ํƒ,์‚ฝ์ž…,ํ€ต,๊ณ„์ˆ˜ ์ •๋ ฌ๊ณผ ์˜ˆ์ œ

2024. 2. 11. 16:32ยทCoding Test/์ฝ”ํ…Œ ์ด๋ก 
๋ฐ˜์‘ํ˜•

๐Ÿ”Š ๋ณธ ํฌ์ŠคํŒ…์˜ ๋‚ด์šฉ์€ ๋‚˜๋™๋นˆ๋‹˜์˜ [์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค] ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ• ํ›„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•œ ๊ธ€๋กœ, ๋ชจ๋“  ์‚ฌ์ง„๊ณผ ์ž๋ฃŒ์˜ ์ถœ์ฒ˜๋Š” ํ•ด๋‹น ์˜์ƒ์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํ›Œ๋ฅญํ•œ ๊ฐ•์˜๋กœ ์ง€์‹์„ ์ „๋‹ฌํ•ด ์ฃผ์‹  ๋‚˜๋™๋นˆ๋‹˜๊ป˜ ๊ฐ์‚ฌ์˜ ๋ง์”€์„ ์ „ํ•ฉ๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์„ ํƒ ์ •๋ ฌ
  • ์‚ฝ์ž… ์ •๋ ฌ
  • ํ€ต ์ •๋ ฌ
  • ๊ณ„์ˆ˜ ์ •๋ ฌ
  • ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ตํ•˜๊ธฐ
  • ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ˆ์ œ

 

์„ ํƒ ์ •๋ ฌ

  • ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณต

์„ ํƒ ์ •๋ ฌ ๋™์ž‘ ์˜ˆ์‹œ

 

์„ ํƒ ์ •๋ ฌ์€ ๋ฐ˜๋ณต์‹œ๋งˆ๋‹ค ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

 

์„ ํƒ ์ •๋ ฌ ์ฝ”๋“œ

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)

# ์‹คํ–‰๊ฒฐ๊ณผ : [0,1,2,3,4,5,6,7,8,9]

 

์„ ํƒ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์„ ํƒ์ •๋ ฌ์€ N๋ฒˆ ๋งŒํผ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ๋งจ ์•ž์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์‚ฌ์†Œํ•œ ์˜ค์ฐจ๋Š” ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ „์ฒด ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • N + ( N - 1 ) + ( N - 2 ) + … + 2
  • ์ด๋Š” ( N^2 + N - 2 ) / 2 ๋กœ ํ‘œํ˜„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์— ๋”ฐ๋ผ O(N^2) ์ด๋ผ๊ณ  ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์‚ฝ์ž… ์ •๋ ฌ

- ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ณจ๋ผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
- ์„ ํƒ ์ •๋ ฌ์— ๋น„ํ•ด ๊ตฌํ˜„ ๋‚œ์ด๋„๊ฐ€ ๋†’์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฝ์ž… ์ •๋ ฌ ๋™์ž‘ ์˜ˆ์‹œ

 

์‚ฝ์ž… ์ •๋ ฌ ์ฝ”๋“œ

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๊นŒ์ง€ 1์”ฉ ๊ฐ์†Œํ•˜๋ฉฐ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฌธ๋ฒ•
		if array[j]<array[j-1]: # ํ•œ ์นธ์”ฉ ์™ผ์ชฝ์œผ๋กœ ์ด๋™
			array[j], array[j-1] = array[j-1], array[j]
		else: # ์ž๊ธฐ(array [j) ๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ทธ ์œ„์น˜์—์„œ ๋ฉˆ์ถค
			break

print(array)
# ์‹คํ–‰๊ฒฐ๊ณผ : [0,1,2,3,4,5,6,7,8,9]

์‚ฝ์ž… ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์‚ฝ์ž… ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^2) ์ด๋ฉฐ, ์„ ํƒ ์ •๋ ฌ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ˜๋ณต๋ฌธ์ด ๋‘ ๋ฒˆ ์ค‘์ฒฉ๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฝ์ž… ์ •๋ ฌ์€ ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • ์ตœ์„ ์˜ ๊ฒฝ์šฐ O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

ํ€ต ์ •๋ ฌ

  • ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  • ๋ณ‘ํ•ฉ ์ •๋ ฌ๊ณผ ๋”๋ถˆ์–ด ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ€ต ์ •๋ ฌ์€ ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ( Pivot )๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค

ํ€ต ์ •๋ ฌ ๋™์ž‘ ์˜ˆ์‹œ

 

 

 

์ด์ฒ˜๋Ÿผ ํ€ต์ •๋ ฌ์ด ์ˆ˜ํ–‰๋˜๋Š” ๊ณผ์ •์€ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

ํ€ต ์ •๋ ฌ์ด ๋น ๋ฅธ ์ด์œ ?

  • ์ด์ƒ์ ์ธ ๊ฒฝ์šฐ ๋ถ„ํ• ์ด ์ ˆ๋ฐ˜์”ฉ ์ผ์–ด๋‚œ๋‹ค๋ฉด ์ „์ฒด ์—ฐ์‚ฐ ํšŸ์ˆ˜๋กœ O(NllogN)๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋„ˆ๋น„ X ๋†’์ด = N x logN = NlogN

๋‹จ์ˆœํžˆ ์ƒ๊ฐํ–ˆ์„ ๋•Œ, ์ „์ฒด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ํ€ต์ •๋ ฌ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜์”ฉ ๋ถ„ํ• ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.
์ด์ƒ์ ์ธ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๊ฐ€ ์ ˆ๋ฐ˜์”ฉ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์—, ์ „์ฒด ๋†’์ด๋ฅผ logN์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ , ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ N์ด๊ณ  ๋†’์ด๊ฐ€ logN์ด๊ธฐ ๋•Œ๋ฌธ์— NlogN์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ์ด์œ  : ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ–ˆ์„๋•Œ, ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ ์ „์ฒด๋ฅผ ๋Œ๋ฉฐ full-scan์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ€ต ์ •๋ ฌ ์ฝ”๋“œ

1. ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹

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[tight]>=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)

 

2. ํŒŒ์ด์ฌ์˜ ์žฅ์ ์„ ์‚ด๋ฆฐ ๋ฐฉ์‹

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))

 

 


๊ณ„์ˆ˜ ์ •๋ ฌ

  • ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•  ๋–„๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.
  • ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ N, ๋ฐ์ดํ„ฐ(์–‘์ˆ˜) ์ค‘ ์ตœ๋Œ“๊ฐ’์ด K์ผ ๋•Œ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์ˆ˜ํ–‰์‹œ๊ฐ„ O(N+K)๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ณ„์ˆ˜ ์ •๋ ฌ ๋™์ž‘ ์˜ˆ์‹œ

 

 

 

 

๊ณ„์ˆ˜ ์ •๋ ฌ ์†Œ์Šค ์ฝ”๋“œ

# ๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์ด 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=' ')  # ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ตฌ๋ถ„์œผ๋กœ ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜๋งŒํผ ์ธ๋ฑ์Šค ์ถœ๋ ฅ

# [์‹คํ–‰ ๊ฒฐ๊ณผ] : 0 0 1 1 2 2 3 4 5 5 6 7 8 9 9

 

๊ณ„์ˆ˜ ์ •๋ ฌ์˜ ๋ณต์žก๋„ ๋ถ„์„

  • ๊ณ„์ˆ˜ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ๋ชจ๋‘ O(N+K)์ด๋‹ค.
  • ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋•Œ์— ๋”ฐ๋ผ์„œ ์‹ฌ๊ฐํ•œ ๋น„ํšจ์œจ์„ฑ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๊ฐ€ 0๊ณผ 999,999๋กœ ๋‹จ 2๊ฐœ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐฑ๋งŒ๊ฐœ ๋งŒํผ์˜ ์›์†Œ๊ฐ€ ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
  • ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋“ฑ์žฅํ•  ๋•Œ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์„ฑ์ ์˜ ๊ฒฝ์šฐ 100์ ์„ ๋งž์€ ํ•™์ƒ์ด ์—ฌ๋Ÿฌ ๋ช…์ผ ์ˆ˜ ์žˆ๊ธฐ ๋–„๋ฌธ์— ๊ณ„์ˆ˜ ์ •๋ ฌ์ด ํšจ๊ณผ์ ์ด๋‹ค.

 

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ตํ•˜๊ธฐ

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(NlogN)์„ ๋ณด์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ๋‹ค๋ฃฌ ๋„ค ๊ฐ€์ง€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋น„๊ตํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 


๋ฌธ์ œ : ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ต์ฒด

 

 

๋‚ด ํ’€์ด

n,k = map(int,input().split())
a = list(map(int,input().split()))
b = list(map(int,input().split()))

for _ in range(k):
		min_a = min(a)
		max_b = max(b)
    a[a.index(min_a)],b[b.index(max_b)] = max_b,min_a
print(sum(a))
  • K๋ฒˆ ๋„๋Š” ๋ฐ˜๋ณต๋ฌธ
  • min(a), max(b), index ์—ฐ์‚ฐ : ๊ฐ O(n)
  • O(K(n+n+n)) = O(nk)*
  • ์ฆ‰, n๊ณผ k๊ฐ€ ์ตœ๋Œ“๊ฐ’์ธ 10,000,000์ผ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ œํ•œ ๋‚ด์— ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ์˜ ์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(10^5 * 10^5) = O(10^10)์ด๋ฏ€๋กœ, O(10^8) ์—ฐ์‚ฐ์˜ ์ˆ˜ํ–‰์ด 1์ดˆ๋ผ ๊ฐ€์ •ํ•  ๋•Œ, ์•ฝ 100์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ.

์ด์ฝ”ํ…Œ ์„ค๋ช…

  • ํ•ต์‹ฌ ์•„์ด๋””์–ด : ๋งค๋ฒˆ ๋ฐฐ์—ด A์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ๊ณจ๋ผ์„œ, ๋ฐฐ์—ด B์—์„œ ๊ฐ€์žฅ ํฐ ์›์†Œ์™€ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ ๋จผ์ € ๋ฐฐ์—ด A์™€ B๊ฐ€ ์ฃผ์–ด์ง€๋ฉด A์— ๋Œ€ํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ณ , B์— ๋Œ€ํ•ด ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ดํ›„ ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ฒซ ๋ฒˆ์จฐ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํ™•์ธํ•˜๋ฉฐ A์˜ ์›์†Œ๊ฐ€ B์˜ ์›์†Œ๋ณด๋‹ค ์ž‘์„ ๋•Œ์—๋งŒ ๊ต์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฌธ์ œ์—์„œ๋Š” ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ ์ตœ๋Œ€ 100,000๊ฐœ ๊นŒ์ง€ ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ตœ์•…์˜ ๊ฒฝ์šฐ O(NlogN)์šธ ๋ณด์žฅํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด์ฝ”ํ…Œ ํ’€์ด

n,k = map(int,input().split()) # N๊ณผ K๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ
a = list(map(int,input().split())) # ๋ฐฐ์—ด A์˜ ๋ชจ๋“  ์›์†Œ ์ž…๋ ฅ๋ฐ›๊ธฐ
b = list(map(int,input().split())) # ๋ฐฐ์—ด B์˜ ๋ชจ๋“  ์›์†Œ ์ž…๋ ฅ๋ฐ›๊ธฐ

a.sort() # ๋ฐฐ์—ด A๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ์ˆ˜ํ–‰
b.sort() # ๋ฐฐ์—ด B๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ์ˆ˜ํ–‰

# ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ํ™•์ธํ•˜๋ฉฐ, ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ตœ๋Œ€ K๋ฒˆ ๋น„๊ต
for i in range(k):
	# A์˜ ์›์†Œ๊ฐ€ B์˜ ์›์†Œ๋ณด๋‹ค ์ž‘์€๊ฒฝ์šฐ
	if a[i] < b[i]:
		a[i],b[i] = b[i],a[i]
	else : # A์˜ ์›์†Œ๊ฐ€ B์˜ ์›์†Œ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„๋–„, ๋ฐ˜๋ณต๋ฌธ์„ ํƒˆ์ถœ
		break

print(sum(a)) # ๋ฐฐ์—ด a์˜ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์„ ์ถœ๋ ฅ
๋ฐ˜์‘ํ˜•

'Coding Test > ์ฝ”ํ…Œ ์ด๋ก ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๊ตฌํ˜„ : ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์™„์ „ ํƒ์ƒ‰ - ๋ฌธ์ž์—ด ์žฌ์ •๋ ฌ  (0) 2022.10.21
๊ตฌํ˜„ : ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์™„์ „ ํƒ์ƒ‰ - ์™•์‹ค์˜ ๋‚˜์ดํŠธ  (0) 2022.10.21
๊ตฌํ˜„ : ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์™„์ „ ํƒ์ƒ‰ - ์‹œ๊ฐ ๋ฌธ์ œ  (0) 2022.10.21
๊ตฌํ˜„ : ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์™„์ „ ํƒ์ƒ‰ - ์ƒํ•˜์ขŒ์šฐ ๋ฌธ์ œ  (0) 2022.10.20
๊ทธ๋ฆฌ๋””(ํƒ์š•๋ฒ•) ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋ชจํ—˜๊ฐ€ ๊ธธ๋“œ  (0) 2022.10.20
'Coding Test/์ฝ”ํ…Œ ์ด๋ก ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๊ตฌํ˜„ : ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์™„์ „ ํƒ์ƒ‰ - ๋ฌธ์ž์—ด ์žฌ์ •๋ ฌ
  • ๊ตฌํ˜„ : ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์™„์ „ ํƒ์ƒ‰ - ์™•์‹ค์˜ ๋‚˜์ดํŠธ
  • ๊ตฌํ˜„ : ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์™„์ „ ํƒ์ƒ‰ - ์‹œ๊ฐ ๋ฌธ์ œ
  • ๊ตฌํ˜„ : ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ์™„์ „ ํƒ์ƒ‰ - ์ƒํ•˜์ขŒ์šฐ ๋ฌธ์ œ
jjikky
jjikky
  • jjikky
    jikky.env
    jjikky
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • React
      • Node.js
        • TDD
        • Node.js
        • mern
        • OAuth
        • js_facebook login
      • Coding Test
        • ๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜
        • CodeUp
        • ์ฝ”ํ…Œ ์ด๋ก 
      • Js
        • Javascript
      • study
        • python
        • android
        • Big data analysis
        • Logic Circuit
      • git
      • ๊ฐœ๋ฐœ์ผ์ง€
      • ๊ฒŒ์ž„๊ธฐํš
      • Docker
      • IPFS
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ํŒŒ์ด์ฌ ๊ทธ๋ฆฌ๋””
    ์•ˆ๋“œ๋กœ์ด๋“œ
    NFT IPFS
    ํŒŒ์ด์ฌ ์™„์ „ํƒ์ƒ‰
    Python
    ํŒŒ์ด์ฌ
    verilogํ• ๋‹น๋ฌธ
    NFT Marketplace
    git ์œ ์šฉํ•œ ๋ช…๋ น์–ด
    ํŒŒ์ด์ฌ ๋”•์…”๋„ˆ๋ฆฌ
    ๋ฒ”์ฃผํ˜• ์ž๋ฃŒ
    Ipfs
    verilog
    nft
    UI
    ipfs add
    ifps ๋„คํŠธ์›Œํฌ ์ง€์—ฐ
    ๋น…๋ฐ์ดํ„ฐ
    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
jjikky
[์ด์ฝ”ํ…Œ python] ์ •๋ ฌ - ์„ ํƒ,์‚ฝ์ž…,ํ€ต,๊ณ„์ˆ˜ ์ •๋ ฌ๊ณผ ์˜ˆ์ œ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”