λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“ μ•Œκ³ λ¦¬μ¦˜/Code Tree

[μ½”λ“œνŠΈλ¦¬] 반볡문의 μ‹œκ°„λ³΅μž‘λ„(1)

SWμ€‘μ‹¬λŒ€ν•™ μ‚¬μ—…λ‹¨μ—μ„œ CodeTree와 ν•¨κ»˜ μ‹€μ‹œν•œ μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ 캠프에 μ°Έμ—¬ν•˜μ—¬ κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

function example(n)
  while 0 > n or n > 100
    if n < 0
      n++
    else
      n--
  return n

 

μœ„ μ½”λ“œμ˜ 경우 n에 값에 따라 μ—°μ‚°μ˜ νšŸμˆ˜κ°€ λ‹¬λΌμ§ˆ 수 밖에 μ—†μŠ΅λ‹ˆλ‹€.

사싀, μ‹œκ°„λ³΅μž‘λ„λŠ” 일반적으둜 μ΅œμ•…μ„ κΈ°μ€€μœΌλ‘œ κ³„μ‚°ν•©λ‹ˆλ‹€. μš°λ¦¬κ°€ μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ³„μ‚°ν•˜λŠ” μ΄μœ κ°€ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 μ²΄ν¬ν•˜κΈ° μœ„ν•¨μ΄μ—ˆμ£ ? λ‹Ήμ—°νžˆ μž…λ ₯값이 μ•„μ£Ό ν¬κ±°λ‚˜ μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” 데이터도 λ“€μ–΄μ˜¬ κ°€λŠ₯성이 μ‘΄μž¬ν•˜λ―€λ‘œ μ΅œμ•…μ˜ 경우λ₯Ό κ³ λ €ν•˜λ©΄ μ–΄λ– ν•œ μƒν™©μ—μ„œλ„ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯이 λ›°μ–΄λ‚œμ§€ 확인할 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

이 점을 μƒκΈ°ν•œ μ±„λ‘œ, 반볡문의 μ‹œκ°„λ³΅μž‘λ„μ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€.

 


for

set x = 0
for i = 0 ... i < 10
  x += 1
  print(x)

 

forλ¬Έ ν•œλ²ˆμ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” O(1)μ΄λ―€λ‘œ, 10번 λ°˜λ³΅μ„ 해도 κ²°κ΅­ μ‹œκ°„λ³΅μž‘λ„λŠ” 

 

κ·ΈλŸ¬λ‚˜ λΆˆλΆ„λͺ…ν•œ 값이 λ“€μ–΄μ˜€κ²Œ 되면 상황은 λ‹¬λΌμ§‘λ‹ˆλ‹€.

function example(n)
  set x = 0
  for i  = 0 ... i < n
    x += 1
    print(x) 
 

쑰금 λ‹Ήν™©μŠ€λŸ¬μšΈ μˆ˜λ„ μžˆμ§€λ§Œ forλ¬Έ λ‚΄λΆ€μ˜ μ½”λ“œμ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” μ΄λ‹ˆ, N번 λ°˜λ³΅μ„ μˆ˜ν–‰ν•˜κ²Œ λœλ‹€λ©΄ μ΄ λ©λ‹ˆλ‹€.

 

set x = 0
for i = 0 ... i < n / 2
  x += 1
  print(x)
 

μœ„μ˜ μ½”λ“œλŠ” λ²ˆ μˆ˜ν–‰μ΄ λ˜κ² μ§€λ§Œ,  ν‘œκΈ°λ²•μ€ μƒμˆ˜λ₯Ό λ¬΄μ‹œν•˜κΈ° λ•Œλ¬Έμ— λ§ˆμ°¬κ°€μ§€λ‘œ λ‹ˆλ‹€.


while

while 문의 경우, λ°˜λ³΅λ¬Έμ„ νƒˆμΆœν•  수 μžˆλŠ” 쑰건이 λΆˆλΆ„λͺ… ν•˜λ―€λ‘œ for에 λΉ„ν•΄ 생각해야 ν•  것이 λ§ŽμŠ΅λ‹ˆλ‹€.

function example(n)
  while 0 > n or n > 100
    if n < 0
      n++
    else
      n--
  return n

 

n이 λ§Œμ•½μ— μ—„μ²­λ‚˜κ²Œ 큰 값이라면 이둠적으둜 N - 100회의 μˆœνšŒκ°€ ν•„μš”ν•  것 μž…λ‹ˆλ‹€.

λ”°λΌμ„œ μ‹œκ°„λ³΅μž‘λ„λŠ” μžμ—°μŠ€λŸ½κ²Œ  μ΄ 될 것 μž…λ‹ˆλ‹€.


 

set x = 0
for i = 0 ... i < n
  for j = 5 ... j < n
      x += 1
      print(x)

for i = 0 ... i < n
    x += 1

print(x)

 

μœ„ μ½”λ“œμ˜ 포문은 , μ•„λž˜ 포문은  μ΄μ§€λ§Œ N^2이 항상 N보닀 ν¬κ±°λ‚˜ κ°™μœΌλ―€λ‘œ

μ‹œκ°„λ³΅μž‘λ„λŠ”

 

반볡문이 μ€‘μ²©λ˜λ©΄ λ°”κΉ₯ 반볡문과 λ‚΄λΆ€ λ°˜λ³΅λ¬Έμ„ λͺ¨λ‘ κ³ λ €ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ‹œκ°„λ³΅μž‘λ„λ₯Ό νŒλ‹¨ν•˜κΈ° 쑰금 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

function solution1(n)
    for i = 1 ... i <= n
        for j = 1 ... j <= 5
            for k = 1 ... k <= n
                    print("Hello")

-> N*5*N =

 

λ‹€μŒ μ½”λ“œλŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ μ½”λ“œ 쀑 ν•˜λ‚˜μΈ 선택 μ •λ ¬μ˜ μ½”λ“œλ‘œ, λ‹€λ₯Έ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ— λΉ„ν•΄ κ°„λ‹¨ν•˜λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

function Selection_sort(arr)
  set len = arr.size
  for i = 0 ... i < len-1
    set min = i
    for j = i+1 ... j < len
      if arr[j] < arr[min]
        min = j
    set tmp = arr[i]
    arr[i] = arr[min]
    arr[min] = tmp
  
  return arr

-> 

 

function solution1(n)
 for i = 0 ... i < n * n
   for k = 0 ... k <= i
     print("Hi")
   for j = n ... j >= 0
     print("Bye")

->  (N^2)*(N^2) + (N^2)*N  => 

function solution2(n)
  for i = 0 ... i < n
    set j = 1
    while j < i
      j *= 2

μœ„ μ½”λ“œλŠ” forλ¬Έ μ•ˆμ— while문이 μžˆλŠ”λ°,

iκ°€ 2λ°° λŠ˜μ–΄λ‚ λ•Œλ§ˆλ‹€ while문은 반볡 νšŸμˆ˜κ°€ 1μ”© λŠ˜μ–΄λ‚˜λ―€λ‘œ 총 log i 번 반볡이 ν•„μš”ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ μ‹œκ°„λ³΅μž‘λ„λŠ” for문은 N, while문은 log N 이라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

-> O(N logN)

 

좜처 μ½”λ“œνŠΈλ¦¬