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

Algorithm/์ด์ฝ”ํ…Œ

[์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค] 1์ผ์ฐจ TIL

 

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

 

 

< ๋ณต์žก๋„ >

 

- ์‹œ๊ฐ„ ๋ณต์žก๋„: ํŠน์ •ํ•œ ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ๋ถ„์„

- ๊ณต๊ฐ„ ๋ณต์žก๋„: ํŠน์ •ํ•œ ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ถ„์„ 

=> ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 

 

 

O ํ‘œ๊ธฐ๋ฒ•

- ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ํ•ญ๋งŒ์„ ๊ณ ๋ คํ•˜๋Š” ํ‘œ๊ธฐ๋ฒ• (ํ•จ์ˆ˜์˜ ์ƒํ•œ๋งŒ์„ ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋œ๋‹ค) 

 

์ƒ๋‹จ๋ถ€ํ„ฐ ๋ณต์žก๋„๊ฐ€ ์ข‹์€ ์ˆœ์„œ

 

์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐ

 

(1)

array = [3, 5, 1, 2, 4] 
summary = 0

for x in array: 
	summary += x 

print(summary) 

# ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜์— ๋น„๋ก€ํ•˜์—ฌ ์ฆ๊ฐ€ํ•จ 
# O(N)

 

(2) 

array = [3, 5, 1, 2, 4] 
summary = 0

for x in array: 
	for y in array:
		temp = x * y
		print(temp)

# O(N^2)
# ๋ชจ๋“  ์ด์ค‘๋ฐ˜๋ณต๋ฌธ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N^2)์ธ ๊ฒƒ์€ ์•„๋‹˜ (์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด ๊ทธ ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•จ)

 

** ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ์—์„œ ์‹œ๊ฐ„ ์ œํ•œ์€ ํ†ต์ƒ 1~5์ดˆ (๋Œ€๋žต 5์ดˆ ์ •๋„๋กœ ์ƒ๊ฐํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ) 

 

 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ • 
  1. ์ง€๋ฌธ ์ฝ๊ธฐ 
  2. ์š”๊ตฌ์‚ฌํ•ญ(๋ณต์žก๋„) ๋ถ„์„ 
  3. ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์•„์ด๋””์–ด ์ฐพ๊ธฐ 
  4. ์†Œ์Šค์ฝ”๋“œ ์„ค๊ณ„ ๋ฐ ์ฝ”๋”ฉ 

 

์ˆ˜ํ–‰ ์‹œ๊ฐ„ ์ธก์ • ์†Œ์Šค์ฝ”๋“œ ์˜ˆ์ œ

import time
start_time = time.time() #์ธก์ • ์‹œ์ž‘

#ํ”„๋กœ๊ทธ๋žจ์†Œ์Šค์ฝ”๋“œ 
end_time = time. time() #์ธก์ • ์ข…๋ฃŒ 
print(“time:”, end_time - start_time) #์ˆ˜ํ–‰์‹œ๊ฐ„์ถœ๋ ฅ

 

 

< Phython ๋ฌธ๋ฒ•  >

 

(1) ์†Œ์ˆ˜๋ถ€๊ฐ€ 0์ผ ๋•Œ 0์„ ์ƒ๋žต

a = 5.
print(a) # output: 5.0

 

 

(2) ์ •์ˆ˜๋ถ€๊ฐ€ 0์ผ ๋•Œ 0์„ ์ƒ๋žต 

a = -.7
print(a) # output: -0.7

 

 

(3) ์ง€์ˆ˜์˜ ํ‘œํ˜„ ๋ฐฉ์‹ 

 

  ex ) 10์˜ 9์ œ๊ณฑ = 1e9

=> ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•˜์—ฌ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌดํ•œ(INF)๋กœ ์„ค์ •ํ•˜๊ณค ํ•œ๋‹ค. ์ด๋•Œ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ“๊ฐ’์ด 10์–ต ๋ฏธ๋งŒ์ด๋ผ๋ฉด ๋ฌดํ•œ(INF)์˜ ๊ฐ’์œผ๋กœ 1e9๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

(4) ์‹ค์ˆ˜ํ˜• 

 

=> ๊ฐœ๋ฐœ๊ณผ์ •์—์„œ ์‹ค์ˆ˜๊ฐ’์„ ์ œ๋Œ€๋กœ ๋น„๊ตํ•˜์ง€ ๋ชปํ•ด์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” round() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

=> ํŒŒ์ด์ฌ์—์„œ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์ž(/)๋Š” ๋‚˜๋ˆ ์ง„ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ˆ˜ํ˜•์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

 

(5) ํŠน์ • ์›์†Œ๊ฐ€ n๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ๋ฐฐ์—ด ์ƒ์„ฑ 

n = 10
a = [0] * n
print(a) // output: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 

(6) ์›์†Œ์˜ index์— ๋”ฐ๋ฅธ ์›์†Œ ์ถœ๋ ฅ 

a = [1, 2, 3, 4]

#๋’ค์—์„œ ์ฒซ ๋ฒˆ์งธ ์›์†Œ ์ถœ๋ ฅ 
print(a[-1]) # output: 4

#๋„ค๋ฒˆ์งธ ์›์†Œ ๊ฐ’ ๋ณ€๊ฒฝ 
a[3] = 7
print(a) # output: [1, 2, 3, 7]

#๋‘๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์„ธ๋ฒˆ์งธ ์›์†Œ๊นŒ์ง€ 
print(a[1:3]) # output: [2, 3]

 

(7) ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ 

# 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฆฌ์ŠคํŠธ 
array = [ i for i in range(10)]
print(array)

# 0๋ถ€ํ„ฐ 19๊นŒ์ง€์˜ ์ˆ˜ ์ค‘์—์„œ ํ™€์ˆ˜๋งŒ ํฌํ•จํ•˜๋Š” ๋ฆฌ์ŠคํŠธ 
array = [ i for i in range(20) if i % 2 == 1]
print(array)

# 1๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆ˜๋“ค์˜ ์ œ๊ณฑ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๋ฆฌ์ŠคํŠธ 
array = [i * i for i in range(1,10)]
print(array)

=> ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์€ ํŠนํžˆ N X M ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ์ดˆ๊ธฐํ™” ํ•ด์•ผ ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค. 

 

# ์ž˜๋ชป๋œ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ 

n = 4
m = 3

array = [[0] * m] * n 

array[1][1] = 5
print(array) # output: [[0,5,0],[0,5,0],[0,5,0],[0,5,0]]

=> [[0] * [m]] ์ด ๊ฐ™์€ ๊ฐ์ฒด๋กœ์„œ ์ธ์‹๋˜์–ด ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ

 

 

(8) ๋ฐฐ์—ด ๊ด€๋ จ ์ž์ฃผ ์“ฐ์ด๋Š” ํ•จ์ˆ˜ 

 

# ํŠน์ • ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ 
a.insert(2,3) 
print(“์ธ๋ฑ์Šค 2์— 3 ์ถ”๊ฐ€: “, a) 

# ํŠน์ • ๊ฐ’์ธ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ
print(“๊ฐ’์ด 3์ธ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜: “, a.count(3))

# remove_list ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฐ’๋งŒ์„ ์ €์žฅ
a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}
 
result = [ i for i in a if i not in remove_set]
print(result)

 

(9) ๋ฌธ์ž์—ด : ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด 

# ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ๋„ ๊ฐ€๋Šฅ
a = "ABCDEF"
print(a[1:3]) # output: "BC"

 

(10) ํŠœ๋ธ” ์ž๋ฃŒํ˜• 

ํŠœํ”Œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ 

-  ์„œ๋กœ ๋‹ค๋ฅธ ์„ฑ์งˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋•Œ 

-  ๋ฐ์ดํ„ฐ์˜ ๋‚˜์—ด์„ ํ•ด์‹ฑ์˜ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ 

- ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ 

 

(11) map ํ•จ์ˆ˜ 

# ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค๊ธฐ
n = int(input())
data = list(map(int,input().split()))

print(n)
print(data)

 

(12) ์ถœ๋ ฅ์„ ์œ„ํ•œ ์ „ํ˜•์ ์ธ ์†Œ์Šค์ฝ”๋“œ 

a = 1 
b = 2 
print(a,b)
print(7, end=" ")
print(8, end=" ")

answer = 7
print("์ •๋‹ต์€" + str(answer) + "์ž…๋‹ˆ๋‹ค") # output: 7 8 ์ •๋‹ต์€ 7์ž…๋‹ˆ๋‹ค