Notice
Recent Posts
Link
Today
Total
10-06 00:17
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[ Python ] ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฌธ๋ฒ•๊ณผ ์ฃผ์˜์  ๋ณธ๋ฌธ

๐Ÿ”ตCoding Test/Syntax

[ Python ] ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฌธ๋ฒ•๊ณผ ์ฃผ์˜์ 

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 2. 4. 19:30

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€,

ํŠน์ •ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋†“์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์˜๋ฏธ

1) ๋‚ด์žฅ ํ•จ์ˆ˜ : print( ), input( )๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ sorted( )์™€ ๊ฐ™์€ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ์—†์–ด์„œ๋Š” ์•ˆ๋˜๋Š” ํ•„์ˆ˜์ ์ธ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
2) itertools : ํŒŒ์ด์ฌ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ˆœ์—ด๊ณผ ์กฐํ•ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
3) heapq : ํž™(heap) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
4) bisect : ์ด์ง„ํƒ์ƒ‰(Binary Search) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
5) collections : ๋ฑ(deque), ์นด์šดํ„ฐ(Counter) ๋“ฑ์˜ ์œ ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
6) math : ํ•„์ˆ˜์ ์ธ ์ˆ˜ํ•™์  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ํŽ™ํ† ๋ฆฌ์–ผ, ์ œ๊ณฑ๊ทผ, ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(GCD), ์‚ผ๊ฐํ•จ์ˆ˜ ๊ด€๋ จ ํ•จ์ˆ˜๋ถ€ํ„ฐ ํŒŒ์ด(pi)์™€ ๊ฐ™์€ ์ƒ์ˆ˜๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

๋‚ด์žฅ ํ•จ์ˆ˜ : ๋ณ„๋„์˜ import ๋ช…๋ น์–ด ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์žฅํ•จ์ˆ˜


sum( ) : ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ iterable ๊ฐ์ฒด๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

result = sum([1, 2, 3, 4, 5])
print(result) # 15

* iterable ๊ฐ์ฒด : ๋ฐ˜๋ณต๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ๋ฆฌ์ŠคํŠธ, ์‚ฌ์ „ ์ž๋ฃŒํ˜•, ํŠœํ”Œ ์ž๋ฃŒํ˜• ๋“ฑ


min( ) : ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ ๋“ค์–ด์™”์„ ๋•Œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๋ฐ˜ํ™˜

result = min(7, 3, 5, 2)
print(result) # 2

max( ) : ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ ๋“ค์–ด์™”์„ ๋•Œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜

result = max(7, 3, 5, 2)
print(result) # 7

eval( ) : ์ˆ˜ํ•™ ์ˆ˜์‹์ด ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹น ์ˆ˜์‹์„ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

result = eval("(3+5)*7")
print(result) # 56

sorted( ) : iterable ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ, ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜. key ์†์„ฑ์œผ๋กœ ์ •๋ ฌ ๊ธฐ์ค€์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, reverse ์†์„ฑ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋’ค์ง‘์„์ง€์˜ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

result = sorted([9, 1, 8, 5, 4]) # ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
print(result) # [1, 4, 5, 8, 9]
result = sorted([9, 1, 8, 5, 4], reverse=True) # ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
print(result) # [9, 8, 5, 4, 1]

ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋กœ ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ์ด ์กด์žฌํ•  ๋•Œ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
์ •๋ ฌ ๊ธฐ์ค€ : key ์†์„ฑ

ex) ๋ฆฌ์ŠคํŠธ [('ํ™๊ธธ๋™', 35), ('์ด์ˆœ์‹ ', 75), ('์•„๋ฌด๊ฐœ', 50)] : ์›์†Œ๋ฅผ ํŠœํ”Œ์˜ ๋‘ ๋ฒˆ์งธ ์›์†Œ(์ˆ˜)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

result = sorted([('ํ™๊ธธ๋™', 35), ('์ด์ˆœ์‹ ', 75), ('์•„๋ฌด๊ฐœ', 50)], key=lambda x: x[1], reverse=True)
print(result) #[('์ด์ˆœ์‹ ', 75), ('์•„๋ฌด๊ฐœ', 50), ('ํ™๊ธธ๋™', 35)]

sort( ) : ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ฐ’์ด ์ •๋ ฌ๋œ ๊ฐ’์œผ๋กœ ๋ฐ”๋กœ ๋ณ€๊ฒฝ

data = [9, 1, 8, 5, 3]
data.sort()
print(data) # [1, 3, 5, 8, 9]

 

itertools : ๋ฐ˜๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ ํฌํ•จ

permutations, combinations, product, combinations_with_replacement

permutations : ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ iterable ๊ฐ์ฒด์—์„œ r๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ(์ˆœ์—ด)๋ฅผ ๊ณ„์‚ฐ class

๊ฐ์ฒด ์ดˆ๊ธฐํ™” ์ดํ›„์—๋Š” ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

ex) ๋ฆฌ์ŠคํŠธ ['A', 'B', 'C']์—์„œ 3๊ฐœ (r=3)๋ฅผ ๋ฝ‘์•„ ๋‚˜์—ดํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์‹œ

from itertools import permutations

data = ['A', 'B', 'C'] #๋ฐ์ดํ„ฐ ์ค€๋น„
result = list(permutations(data, 3)) # ๋ชจ๋“  ์ˆœ์—ด ๊ตฌํ•˜๊ธฐ

print(result)
# [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

combinations : ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ iterable๊ฐ์ฒด์—์„œ r๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„ ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋‚˜์—ดํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ(์กฐํ•ฉ)์„ ๊ณ„์‚ฐ class

๊ฐ์ฒด ์ดˆ๊ธฐํ™” ์ดํ›„์—๋Š” ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

ex) ๋ฆฌ์ŠคํŠธ ['A', 'B', 'C']์—์„œ 2๊ฐœ (r=2)๋ฅผ ๋ฝ‘์•„ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋‚˜์—ดํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์‹œ

from itertools import combinations

data = ['A', 'B', 'C'] #๋ฐ์ดํ„ฐ ์ค€๋น„
result = list(combinations(data, 2)) # 2๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๋ชจ๋“  ์กฐํ•ฉ ๊ตฌํ•˜๊ธฐ 

print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'C')]

product : permutations์™€ ๊ฐ™์ด ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ iterable๊ฐ์ฒด์—์„œ r๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„
์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ (์ˆœ์—ด)์„ ๊ณ„์‚ฐ class ** ์›์†Œ๋ฅผ ์ค‘๋ณตํ•ด์„œ ๋ฝ‘๋Š”๋‹ค **

product ๊ฐ์ฒด ์ดˆ๊ธฐํ™” : ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ repeat ์†์„ฑ๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค.
๊ฐ์ฒด ์ดˆ๊ธฐํ™” ์ดํ›„์—๋Š” ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

ex) ๋ฆฌ์ŠคํŠธ ['A', 'B', 'C']์—์„œ ์ค‘๋ณต์„ ํฌํ•จํ•˜์—ฌ 2๊ฐœ (r=2)๋ฅผ ๋ฝ‘์•„ ๋‚˜์—ดํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์‹œ

from itertools import product

data = ['A', 'B', 'C'] #๋ฐ์ดํ„ฐ ์ค€๋น„
result = list(product(data, repeat=2)) # 2๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๋ชจ๋“  ์ˆœ์—ด ๊ตฌํ•˜๊ธฐ (์ค‘๋ณตํ—ˆ์šฉ)

print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]

combinations_with_replacement : combinations์™€ ๊ฐ™์ด ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ iterable๊ฐ์ฒด์—์„œ r๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„ ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ (์กฐํ•ฉ)์„ ๊ณ„์‚ฐ class ** ์›์†Œ๋ฅผ ์ค‘๋ณตํ•ด์„œ ๋ฝ‘๋Š”๋‹ค **

๊ฐ์ฒด ์ดˆ๊ธฐํ™” ์ดํ›„์—๋Š” ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

ex) ๋ฆฌ์ŠคํŠธ ['A', 'B', 'C']์—์„œ ์ค‘๋ณต์„ ํฌํ•จํ•˜์—ฌ 2๊ฐœ (r=2)๋ฅผ ๋ฝ‘์•„ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋‚˜์—ดํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์‹œ

from itertools import combinations_with_replacement

data = ['A', 'B', 'C'] #๋ฐ์ดํ„ฐ ์ค€๋น„
result = list(combinations_with_replacement(data, 2)) # 2๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๋ชจ๋“  ์กฐํ•ฉ ๊ตฌํ•˜๊ธฐ (์ค‘๋ณตํ—ˆ์šฉ)

print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

heapq : ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํฌํ•จํ•ด ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์šฐ์„ ์ˆœ์œ„ ํ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ

 

- ํŒŒ์ด์ฌ์˜ ํž™์€ ์ตœ์†Œ ํž™์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‹จ์ˆœํžˆ ์›์†Œ๋ฅผ ํž™์— ์ „๋ถ€ ๋„ฃ์—ˆ๋‹ค๊ฐ€ ๋นผ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(NlogN)์— ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด ์™„๋ฃŒ๋œ๋‹ค.
- ๋ณดํ†ต ์ตœ์†Œ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ตœ์ƒ๋‹จ ์›์†Œ๋ฅผ ํ•ญ์ƒ '๊ฐ€์žฅ ์ž‘์€'์›์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํž™์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ : heapq.heappush( )
ํž™์— ์›์†Œ๋ฅผ ๊บผ๋‚ผ ๋•Œ : heapq.heappop( )

ex) ํž™ ์ •๋ ฌ์„ heapq๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์˜ˆ์ œ

import heapq

def heapsort(iterable):
    h = []
    result = []
    # ๋ชจ๋“  ์›์†Œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ํž™์— ์‚ฝ์ž…
    for value in iterable:
        heapq.heappush(h, value)
    # ํž™์— ์‚ฝ์ž…๋œ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๊บผ๋‚ด์–ด ๋‹ด๊ธฐ
    for i in range(len(h)):
        result.append(heapq.heappop(h))
    return result

result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

ํŒŒ์ด์ฌ์—์„œ๋Š” ์ตœ๋Œ€ ํž™์„ ์ œ๊ณต X
heapq ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ๋Œ€ํž™ ๊ตฌํ˜„ ์‹œ, ์›์†Œ์˜ ๋ถ€ํ˜ธ๋ฅผ ์ž„์‹œ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉ

** ํž™์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์ „์— ์ž ์‹œ ๋ถ€ํ˜ธ๋ฅผ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค๊ฐ€ ํž™์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ธ ๋’ค์— ๋‹ค์‹œ ์›์†Œ์˜ ๋ถ€ํ˜ธ๋ฅผ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค. **


ex) ์ตœ๋Œ€ํž™์„ ๊ตฌํ˜„ํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ ํž™ ์ •๋ ฌ์„ ๊ตฌํ˜„

import heapq

def heapsort(iterable):
    h = []
    result = []
    # ๋ชจ๋“  ์›์†Œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ํž™์— ์‚ฝ์ž…
    for value in iterable:
        heapq.heappush(h, -value)
    # ํž™์— ์‚ฝ์ž…๋œ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๊บผ๋‚ด์–ด ๋‹ด๊ธฐ
    for i in range(len(h)):
        result.append(-heapq.heappop(h))
    return result

result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result) #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

bisect : ์ด์ง„ ํƒ์ƒ‰์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„, '์ •๋ ฌ๋œ ๋ฐฐ์—ด'์—์„œ ํŠน์ •ํ•œ ์›์†Œ๋ฅผ ์ฐพ์•„์•ผํ•  ๋•Œ ๋งค์šฐ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ๋จ

 

- bisect_left(a, x) : ์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด์„œ ๋ฆฌ์ŠคํŠธ a์— ๋ฐ์ดํ„ฐ x๋ฅผ ์‚ฝ์ž…ํ•  ๊ฐ€์žฅ ์™ผ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š” ๋ฉ”์„œ๋“œ
- bisect_right(a, x) : ์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด์„œ ๋ฆฌ์ŠคํŠธ a์— ๋ฐ์ดํ„ฐ x๋ฅผ ์‚ฝ์ž…ํ•  ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š” ๋ฉ”์„œ๋“œ

ex) ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ [1, 2, 4, 4, 8]์ด ์žˆ์„ ๋•Œ, ์ƒˆ๋กญ๊ฒŒ ๋ฐ์ดํ„ฐ 4๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค ํ•œ๋‹ค๊ณ  ๊ฐ€์ •
bisect_left(a, 4)์™€ bisect_right(a, 4)๋Š” ๊ฐ๊ฐ ์ธ๋ฑ์Šค ๊ฐ’์œผ๋กœ 2์™€ 4์„ ๋ฐ˜ํ™˜

from bisect import bisect_left, bisect_right

a = [1, 2, 4, 4, 8]
x = 4

print(bisect_left(a,x)) # 2
print(bisect_right(a,x)) # 4

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

from bisect import bisect_left, bisect_right

# ๊ฐ’์ด [left_value, right_value]์ธ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
def count_by_range(a, left_value, right_value):
    right_index = bisect_right(a, right_value)
    left_index = bisect_left(a, left_value)
    return right_index - left_index

# ๋ฆฌ์ŠคํŠธ ์„ ์–ธ
a = [1, 2, 3, 3, 3, 3, 4 ,4 , 8, 9]

# ๊ฐ’์ด 4์ธ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ์ถœ๋ ฅ
print(count_by_range(a, 4, 4)) # 2

# ๊ฐ’์ด [-1, 3] ๋ฒ”์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ์ถœ๋ ฅ
print(count_by_range(a, -1, 3)) # 6

collections : ์œ ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ deque, Counter

 

- deque : ํ ๊ตฌํ˜„์šฉ๋„, ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ธ๋ฑ์‹ฑ, ์Šฌ๋ผ์ด์‹ฑ ๊ธฐ๋Šฅ ์‚ฌ์šฉ X. ๋‹ค๋งŒ ์—ฐ์†์ ์œผ๋กœ ๋‚˜์—ด๋œ ๋ฐ์ดํ„ฐ์˜ ์‹œ์ž‘๋ถ€๋ถ„์ด๋‚˜ ๋ ๋ถ€๋ถ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ๋Š” ๋งค์šฐ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
- Counter : ๋“ฑ์žฅํšŸ์ˆ˜๋ฅผ ์„ธ๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต. ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ iterable ๊ฐ์ฒด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ•ด๋‹น ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์›์†Œ๊ฐ€ ๋ช‡ ๋ฒˆ์”ฉ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค. ** ์›์†Œ๋ณ„ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ์„ธ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ ์งง์€ ์†Œ์Šค์ฝ”๋“œ๋กœ ์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. **

๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ์˜ ์ž๋ฃŒํ˜•

  ๋ฆฌ์ŠคํŠธ deque
๊ฐ€์žฅ ์•ž์ชฝ์— ์›์†Œ ์ถ”๊ฐ€ O(N) O(1)
๊ฐ€์žฅ ๋’ค์ชฝ์— ์›์†Œ ์ถ”๊ฐ€ O(1) O(1)
๊ฐ€์žฅ ์•ž์ชฝ์— ์žˆ๋Š” ์›์†Œ ์ œ๊ฑฐ O(N) O(1)
๊ฐ€์žฅ ๋’ค์ชฝ์— ์žˆ๋Š” ์›์†Œ ์ œ๊ฑฐ O(1) O(1)

๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์€ append()๋ฉ”์„œ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, pop() ๋ฉ”์„œ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๋•Œ '๊ฐ€์žฅ ๋’ค์ชฝ ์›์†Œ'๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์•ž ์ชฝ์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ์—๋Š” ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ์„œ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)

deque๋Š” ์Šคํƒ์ด๋‚˜ ํ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ. **์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋Œ€์šฉ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ**

์ฒซ ๋ฒˆ์งธ ์›์†Œ ์ œ๊ฑฐ : popleft( )
๋งˆ์ง€๋ง‰ ์›์†Œ ์ œ๊ฑฐ : pop( )
์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์›์†Œ x๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ : appendleft(x)
๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ์›์†Œ x๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ : append(x)

๋จผ์ € ๋“ค์–ด์˜จ ์›์†Œ๊ฐ€ ํ•ญ์ƒ ๋จผ์ € ๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค.

ex) ๋ฆฌ์ŠคํŠธ [2, 3, 4]์˜ ๊ฐ€์žฅ ์•ž์ชฝ๊ณผ ๋’ค์ชฝ์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์˜ˆ์‹œ

from collections import deque

data = deque([2, 3, 4])
data.appendleft(1)
data.append(5)

print(data) # deque([1, 2, 3, 4, 5])
print(list(data)) # ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜ [1, 2, 3, 4, 5]

Counter

from collections import Counter

counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])

print(counter['blue']) # 3 'blue'๊ฐ€ ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜ ์ถœ๋ ฅ
print(counter['green']) # 1 'green'์ด ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜ ์ถœ๋ ฅ
print(dict(counter)) # {'red': 2, 'blue': 3, 'green': 1} ์‚ฌ์ „ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜

 

math : ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ˆ˜ํ•™์ ์ธ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉํ† ๋ฆฌ์–ผ, ์ œ๊ณฑ๊ทผ, ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๋“ฑ


factorial(x) x! ๊ฐ’ ๋ฐ˜ํ™˜

import math

print(math.factorial(5)) # ํŒฉํ† ๋ฆฌ์–ผ ์ถœ๋ ฅ  120

sqrt(x) x์˜ ์ œ๊ณฑ๊ทผ์„ ๋ฐ˜ํ™˜

import math

print(math.sqrt(7)) # 7์˜ ์ œ๊ณฑ๊ทผ์„ ์ถœ๋ ฅ  2.6457513110645907

gcd(a, b) a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

import math

print(math.gcd(21, 14)) # 7
import math

print(math.pi) # 3.141592653589793 ํŒŒ์ด ์ถœ๋ ฅ
print(math.e) # 2.718281828459045 ์ž์—ฐ์ƒ์ˆ˜ e ์ถœ๋ ฅ

 

 

๋ณธ ๊ฒŒ์‹œ๋ฌผ์€  [ ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ  - ๋‚˜๋™๋นˆ ] ์„ ์ฐธ์กฐํ•˜์—ฌ ์ •๋ฆฌํ•œ ๊ฒŒ์‹œ๊ธ€์ž…๋‹ˆ๋‹ค. 

'๐Ÿ”ตCoding Test > Syntax' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ Python ] ์ž…์ถœ๋ ฅ  (0) 2022.02.04
[ Python ] ํ•จ์ˆ˜  (0) 2022.02.04
[ Python ] ๋ฐ˜๋ณต๋ฌธ  (0) 2022.02.04
[ Python ] ์กฐ๊ฑด๋ฌธ  (0) 2022.02.04
[ Python ] ์ž๋ฃŒํ˜•  (0) 2022.02.04
Comments