[Algorithm] ์ •๋ ฌ - Sort (Python)

seongminnยท2022๋…„ 8์›” 10์ผ
1

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
14/26
post-thumbnail

๐Ÿ“Œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค์—์„œ ์ œ๊ณตํ•œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค.

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

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ด๋ก ์€ ํ•ด๋‹น ํฌ์ŠคํŠธ์— ์ •๋ฆฌํ•ด ๋‘์—ˆ์œผ๋‹ˆ, ์ฐธ๊ณ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž€๋‹ค.


์œ„์—์„œ ์•„๋ž˜๋กœ

์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค. ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ์š”๊ตฌํ•˜๋Š”๋ฐ, sorted() ํ•จ์ˆ˜์˜ reverse ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

n = int(input())

_list = []
for _ in range(n):
	_list.append(int(input()))

_list.sort(reverse=True)

# unpacking
print(*_list)

์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋กœ ํ•™์ƒ ์ถœ๋ ฅํ•˜๊ธฐ

๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ€ 2๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ์„ ๋•Œ, ํŒŒ์ด์ฌ์˜ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์„ ํ•œ๋‹ค. ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” ๋‘๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ๊ฒƒ์„ ์š”๊ตฌํ•˜๋Š”๋ฐ, ์ด๋Š” key ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. key ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” sorted() ํ•จ์ˆ˜๋Š” key ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

n = int(input())

_list = []

for _ in range(n):
	a, b = input().split()
	
	_list.append((a, int(b)))

_list.sort(key=lambda x: x[-1])

for i in _list:
	print(i[0], end=" ")

๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ต์ฒด

๋ฐฐ์—ด A๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ, ๋ฐฐ์—ด B๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ 0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ k-1๋ฒˆ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ๊ฐ’๋“ค์„ ๋ฐ”๊พธ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ

n, k = map(int, input().split())
listA = list(map(int, input().split()))
listB = list(map(int, input().split()))

listA.sort()
listB.sort(reverse=True)

for idx in range(k):
	if listA[idx] < listB[idx]:
		listA[idx], listB[idx] = listB[idx], listA[idx]
	
	# ๊ต์ฒดํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
	else:
		break

print(sum(listA))

์ฒ˜์Œ์— ๊ฐ„๊ณผํ•œ ๊ฒƒ์ด list A์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด list B์˜ ๊ฐ€์žฅ ํฐ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค.


๊ตญ์˜์ˆ˜

์•ž์„œ ๋งํ–ˆ๋“ฏ์ด, 2๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์›์†Œ๋กœ ํ•˜๋Š” ๋ฆฌ์ŠคํŠธ์— ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ์šฉํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. ์ด ๋•Œ, key ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ •๋ ฌ ๊ธฐ์ค€์„ ์ •ํ•  ์ˆ˜ ์žˆ๊ณ , 2๊ฐœ ์ด์ƒ์˜ key๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋ฉด ์ด๋Š” ์šฐ์„ ์ˆœ์œ„์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ key์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , ์ฒซ๋ฒˆ์งธ ์›์†Œ๊ฐ€ ๊ฐ™์€ ๊ฐ’๋“ค์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” ๋‘๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

n = int(input())

_list = []

for _ in range(n):
	name, kor, eng, math = input().split()
	_list.append((name, int(kor), int(eng), int(math)))

_list.sort(key=lambda x: (-x[1], x[2], -x[3], x[0]))

for item in _list:
	print(item[0])

์•ˆํ…Œ๋‚˜

ํ•ด๋‹น ๋ฌธ์ œ์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ์ •๋ ฌํ•œ ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ๊ฐ€์šด๋ฐ์˜ ๊ฐ’์„ ์„ ํƒํ•˜๋ฉด ์ตœ์ ์˜ ํ•ด๋ฅผ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

n = int(input())

house = list(map(int, input().split()))

print(sorted(house)[(n-1) // 2])

์‹คํŒจ์œจ

๊ณ„์ˆ˜ ์ •๋ ฌ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ์Šคํ…Œ์ด์ง€์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด๋“ค์˜ ์ˆ˜๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๋‚ฎ์€ ์Šคํ…Œ์ด์ง€๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ์ ‘๊ทผํ•˜์—ฌ ํ˜„์žฌ ์Šคํ…Œ์ด์ง€์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด ์ˆ˜ / ํ˜„์žฌ ์Šคํ…Œ์ด์ง€์— ์ง„์ž…ํ•œ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ตฌํ•ด์ฃผ์—ˆ๊ณ , ์ „์ฒด ํ”Œ๋ ˆ์ด์–ด์—์„œ ํ˜„์žฌ ์Šคํ…Œ์ด์ง€์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋นผ์ฃผ์–ด ๋‹ค์Œ ์Šคํ…Œ์ด์ง€์— ์ง„์ž…ํ•œ ํ”Œ๋ ˆ์ด์–ด ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค. ์ด๋ฅผ ์Šคํ…Œ์ด์ง€ ๋„˜๋ฒ„์™€ ํ•จ๊ป˜ answer ๋ฐฐ์—ด์— ๋„ฃ์–ด ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚œ ๋’ค์—๋Š” sorted() ํ•จ์ˆ˜์™€ key ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹คํŒจ์œจ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

# ๊ณ„์ˆ˜ ์ •๋ ฌ
stay = [0] * (n + 1)

for i in range(len(stages)):
	stay[stages[i]-1] += 1

# ์ „์ฒด ํ”Œ๋ ˆ์ด์–ด ์ˆ˜
player = len(stages)
answer = []
for idx in range(n):
	if player:
		answer.append((idx, stay[idx] / player))

	# ํ˜„์žฌ ์Šคํ…Œ์ด์ง€์— ์ง„์ž…ํ•œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ 0๋ช…์ธ ๊ฒฝ์šฐ
	else:
		answer.append((idx, 0))	
	player -= stay[idx]

# ์‹คํŒจ์œจ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
answer.sort(key=lambda x: -x[1])
answer = [i[0] + 1 for i in answer]

print(answer)

--

์ฐธ๊ณ  ๋„์„œ

๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ ๋‚˜ ๋™๋นˆ, ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค

profile
๋Œ๋ฉฉ์ด๋„ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋‹ค

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