๐Ÿ’ก Coding Test/Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ(Sorting) (2) ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ sorted(), sort()

soozkim 2023. 5. 30. 17:29
์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ
 

์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ - YES24

๋‚˜๋™๋นˆ ์ €์ž์˜ ์œ ํŠœ๋ธŒ ๋ผ์ด๋ธŒ ๋ฐฉ์†ก https://www.youtube.com/c/dongbinnaIT ์ทจ์ค€์ƒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ž…์‚ฌํ•˜๊ณ  ์‹ถ์€ ์นด์นด์˜ค · ์‚ผ์„ฑ์ „์ž · ๋„ค์ด๋ฒ„ · ๋ผ์ธ!์ทจ์—…์˜ ์„ฑ๊ณต ์—ด์‡ ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ์— ์žˆ๋‹ค!IT ์ทจ์ค€์ƒ

www.yes24.com

6์žฅ. ์ •๋ ฌ

ํŒŒ์ด์ฌ์˜ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

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

array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]

result = sorted(array)
print(result)

# ์ถœ๋ ฅ
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

- sort() ํ•จ์ˆ˜ : ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์˜ ๋‚ด์žฅ ํ•จ์ˆ˜. ๋ณ„๋„์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€ ์›์†Œ๊ฐ€ ๋ฐ”๋กœ ์ •๋ ฌ๋œ๋‹ค.

array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]

array.sort()
print(array)

# ์ถœ๋ ฅ
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

- key ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. key ๊ฐ’์œผ๋กœ๋Š” ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€์•ผํ•˜๋ฉฐ ์ด๋Š” ์ •๋ ฌ ๊ธฐ์ค€์ด ๋œ๋‹ค.

์˜ˆ์ œ) ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ key๋ฅผ ํ™œ์šฉํ•œ ์†Œ์Šค์ฝ”๋“œ

array = [('๋ฐ”๋‚˜๋‚˜', 2), ('์‚ฌ๊ณผ', 5), ('๋‹น๊ทผ', 3)]

def setting(data):
	return data[1]

result = sorted(array, key=setting)
print(result)

# ์ถœ๋ ฅ
# [('๋ฐ”๋‚˜๋‚˜', 2), ('๋‹น๊ทผ', 3), ('์‚ฌ๊ณผ', 5)]

์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

- ํ•ญ์ƒ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(NlogN)์„ ๋ณด์žฅํ•œ๋‹ค

 

1. ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ : ๋‹จ์ˆœํžˆ ์ •๋ ฌ ๊ธฐ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ

2. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ : ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ ๋“ฑ์˜ ์›๋ฆฌ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

3. ๋” ๋น ๋ฅธ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ : ํ€ต ์ •๋ ฌ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ ๊ธฐ๋ฒ•์œผ๋กœ๋Š” ํ’€ ์ˆ˜ ์—†์œผ๋ฉฐ ๊ณ„์ˆ˜ ์ •๋ ฌ ๋“ฑ์˜ ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ์—์„œ ๊ธฐ์กด์— ์•Œ๋ ค์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์กฐ์ ์ธ ๊ฐœ์„ ์„ ๊ฑฐ์ณ์•ผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

์‹ค์ „ ๋ฌธ์ œ 2. ์œ„์—์„œ ์•„๋ž˜๋กœ

- ๋ชจ๋“  ์ˆ˜๋Š” 1์ด์ƒ 100,000์ดํ•˜์ด๋ฏ€๋กœ ์–ด๋– ํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค

- ๊ฐ€์žฅ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๋Š” ํŒŒ์ด์ฌ์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค

# N์„ ์ž…๋ ฅ๋ฐ›๊ธฐ
n = int(input())

# N๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
arr = []
for i in range(n):
    arr.append(int(input()))

# ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌ ์ˆ˜ํ–‰
arr = sorted(arr, reverse=True)
# arr.sort(reverse=True)

# ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ
for i in arr:
    print(i, end=" ")

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

- ํ•™์ƒ์ •๋ณด๋ฅผ (์ ์ˆ˜, ์ด๋ฆ„)์œผ๋กœ ๋ฌถ์€ ๋’ค์— ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค

- ํŠœํ”Œ ๋ฌธ๋ฒ• ์ฐธ๊ณ 

# N์„ ์ž…๋ ฅ๋ฐ›๊ธฐ
n = int(input())

# N๋ช…์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
student = []
for i in range(n):
    input_data = input().split()
    # ์ด๋ฆ„์€ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ, ์ ์ˆ˜๋Š” ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅ
    student.append((input_data[0], int(input_data[1])))

# ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ, ์ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
student = sorted(student, key=lambda student : student[1])

# ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ
for i in student:
    print(i[0], end=' ')

์‹ค์ „ ๋ฌธ์ œ 4. ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ต์ฒด

- ๋ฐฐ์—ด A์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ๊ณจ๋ผ์„œ, ๋ฐฐ์—ด B์—์„œ ๊ฐ€์žฅ ํฐ ์›์†Œ์™€ ๊ต์ฒด๋ฅผ ํ•œ๋‹ค. ๋‹จ ๋ฐฐ์—ด A์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๊ฐ€ B์—์„œ ๊ฐ€์žฅ ํฐ ์›์†Œ๋ณด๋‹ค ์ž‘์„ ๋•Œ๋งŒ ๊ต์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ K๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค

- ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ ์ตœ๋Œ€ 100,000๊ฐœ๊นŒ์ง€ ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ O(NlogN)์„ ๋ณด์žฅํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

n, k = map(int, input().split())

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

a.sort()                # ๋ฐฐ์—ด A๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ์ˆ˜ํ–‰
b.sort(reverse=True)    # ๋ฐฐ์—ด 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์˜ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์„ ์ถœ๋ ฅ

 

728x90