๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CodingTest

[Python] ๋ฌธ์ œ ํ’€ ๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž!

by ๋„์บ๋ฆฌ๐Ÿฑ 2021. 5. 4.
๋ฐ˜์‘ํ˜•

์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋“ค

1๏ธโƒฃ ๋ฐฐ์—ด

์‚ฝ์ž…/์‚ญ์ œ: O(N)

ํƒ์ƒ‰: O(1)

๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋‹จ์ˆœํžˆ List๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ‘‰ ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์ž๋ฃŒ๊ตฌ์กฐ(์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๋Š” ํ•œ์ž๋ฆฌ์”ฉ ๋’ค๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ํ•˜๋Š” ์‹์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด๋œ๋‹ค.)

 

2๏ธโƒฃ ๋ฒกํ„ฐ (= ๋™์ ๋ฐฐ์—ด)

์‚ฝ์ž…/์‚ญ์ œ: O(N)

ํƒ์ƒ‰: O(1)

๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋‹จ์ˆœํžˆ List๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

C++ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ๋ฒกํ„ฐ๋Š” ๋‹ค๋ฅด๋‹ค. 

ํ•˜์ง€๋งŒ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ List๋กœ ์“ฐ๋ฉด ๋œ๋‹ค.

List ์ž์ฒด๊ฐ€ ์ด๋ฏธ ๋™์  ๋ฐฐ์—ด์„ ์ง€์›ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

3๏ธโƒฃ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์‚ฝ์ž…/์‚ญ์ œ: O(1)

ํƒ์ƒ‰: O(N)

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ

๐Ÿ‘‰ ์‹œ๊ฐ„๋ณต์žก๋„ ์ธก๋ฉด์—์„œ ๋ฐฐ์—ด(List)์™€ ๋ฐ˜๋Œ€ ๋œ๋‹ค. (ํƒ์ƒ‰์„ ํ•˜๋ ค๋ฉด ์ˆœ๊ฐ„์ ์œผ๋กœ ํฌ์ธํ„ฐ ๋ถ€๋ถ„์„ ์ฐ๊ณ  ์ฐ๊ณ  ๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰์ด O(N)์ด ๋˜๊ณ , ์—ฐ๊ฒฐ ์ž์ฒด์˜ ์•ž๋’ค๋กœ ์ˆ˜์ •๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์‚ฝ์ž…/์‚ญ์ œ์‹œ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์ด ๋œ๋‹ค.

๐Ÿ‘‰ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ๋ง‰ ์‚ฌ์šฉํ• ์ผ์ด ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ, ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„์—๋„ ๋งŽ์ด ์“ฐ์ด๋‹ˆ ์ด๋ก ์ƒ ์•Œ์•„๋‘˜ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. 

(๋ฉด์ ‘์งˆ๋ฌธ์œผ๋กœ๋„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ฒ ๋‹ค! ex) "์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ๋ฐ ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์“ธํ…๊ฐ€??")

 

 

4๏ธโƒฃ ์Šคํƒ LIFO

์‚ฝ์ž…/์‚ญ์ œ: O(1)

๐Ÿ‘‰ Last In First Out

๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ ๊ตฌํ˜„์€ List๋กœ ํ•œ๋‹ค. 

s = [1,2,3,4,5,6]

while(len(s)>0):
	print(s[-1])
    s.pop(-1)

์œ„์˜ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ๊ตฌํ˜„ ๋˜๋ฉด ๋˜๋Š”๋ฐ,  ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ฑฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฑฐ๋‹ค. 

 

5๏ธโƒฃ ํ LILO

์‚ฝ์ž…/์‚ญ์ œ: O(1)

๐Ÿ‘‰ ์ค„์„œ๊ธฐ Last in Last Out

๐Ÿ‘‰ from collections import deque ๋กœ ์ž„ํฌํŠธํ•˜์—ฌ ๋ฐํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

from collections import deque

q = deque()
q.append(1)
q.append(2)
q.append(3)

while(len(q) >0):
	print(q.popleft())
   

์œ„ ์ฝ”๋“œ์—์„œ ๋ณด๋ฉด popleft() ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฒ˜์Œ์— ์žˆ๋Š” ๊ฐ’์„ ๋นผ๋Š”๋ฐ, ๋ฐํ๋Š” popright()๋ผ๋Š” ํ•จ์ˆ˜๋„ ์ง€์›ํ•œ๋‹ค.

 

๐Ÿ‘‰ ๋˜ํ•œ ํŒŒ์ด์ฌ์—๋Š” Queue๋„ ์žˆ๊ณ  Deque๋„ ์žˆ๋Š”๋ฐ Queue๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ๋„ ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—ฌ์„œ Deque๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ์ž…์žฅ์ด๋ฏ€๋กœ Deque๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

6๏ธโƒฃ ์šฐ์„ ์ˆœ์œ„ํ(๋‚ด๋ถ€๊ฐ€ Heap์œผ๋กœ ๊ตฌ์„ฑ)

์‚ฝ์ž…/์‚ญ์ œ : O(logN)

import heapq

# ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•œ๋‹ค.
pq = []
heapq.heappush(pq,3)
heapq.heappush(pq,1)
heapq.heappush(pq,2)

while(len(pq) >0):
	print(heapq.heappop(pq))

๐Ÿ‘‰ ํŒŒ์ด์ฌ์€ MinHeap ์ด๋‹ค.(์ด์ง„ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„๋Š” ํ•ญ์ƒ ์ตœ์†Œ๊ฐ’์ธ)

๐Ÿ‘‰ ์šฐ์„  ์ˆœ์œ„ ํ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” , ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์—ฌ๋Ÿฌ ๊ฐ’๋“ค์„ ๋„ฃ๊ณ  ๋บ„๋•Œ๋งˆ๋‹ค ์ ค ์ž‘์€ ๊ฐ’์ด๋‚˜ ์ ค ํฐ ๊ฐ’์„ ์•Œ์•„์•ผ ํ•  ๋•Œ ์จ์•ผ ํ•œ๋‹ค. Sort() ๊ฐ™์€ ๊ฒฝ์šฐ ์ „์ฒด ๋ฆฌ์ŠคํŠธ ์ž์ฒด๋ฅผ ์ •๋ ฌํ•ด์ค€๋‹ค๋Š” ์ ์—์„œ ํฐ ์ฐจ์ด์ ์„ ๊ฐ€์ง„๋‹ค. 

 

7๏ธโƒฃ Map(๋”•์…”๋„ˆ๋ฆฌ)

์‚ฝ์ž…/์‚ญ์ œ: O(1)

๐Ÿ‘‰ ํŒŒ์ด์ฌ์€ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

์ถ”๊ฐ€๋กœ, c++๊ฐ™์€ ๊ฒฝ์šฐ๋Š” O(logN)์ด ๋˜๋Š”๋ฐ ์ด๋Š” c++์˜ ๋งต์€ ์†์„ ๋“ค์—ฌ๋‹ค ๋ณด๋ฉด ์ด์ง„ ๊ทธ๋ž˜ํ”„๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , python์˜ ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฒฝ์šฐ๋Š” ํ•ด์‹œ๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

8๏ธโƒฃ ์ง‘ํ•ฉ(set)

์‚ฝ์ž…/์‚ญ์ œ: O(logN)

๐Ÿ‘‰์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š”๊ฒŒ ํฐ ํŠน์ง•!

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€