λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

Int λ°°μ—΄μ˜ μ΅œλŒ“κ°’ μ΅œμ†Œκ°’ κ΅¬ν•˜κΈ°

by 5566 2023. 9. 18.

1. κ°œμš”

이 글은 int λ°°μ—΄μ—μ„œ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€. μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ€ 주어진 데이터 μ€‘μ—μ„œ κ°€μž₯ 큰 κ°’κ³Ό μž‘μ€ 값을 μ°ΎλŠ” μ€‘μš”ν•œ μž‘μ—…μž…λ‹ˆλ‹€. 이 κΈ€μ—μ„œλŠ” μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ 각각 κ΅¬ν•˜λŠ” λ°©λ²•λΏλ§Œ μ•„λ‹ˆλΌ, 두 값을 λ™μ‹œμ— κ΅¬ν•˜λŠ” 방법에 λŒ€ν•΄μ„œλ„ λ‹€λ£Ήλ‹ˆλ‹€. 이λ₯Ό 톡해 ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” 이 κΈ°λŠ₯에 λŒ€ν•΄ 잘 이해할 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. λ‹€μŒμœΌλ‘œ, μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” κ°€μž₯ 효율적인 μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•œ μ˜ˆμ‹œμ™€ ν•¨κ»˜ μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€. 글을 마치면, int λ°°μ—΄μ—μ„œ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ μ‰½κ²Œ ꡬ할 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. ν•΄λ‹Ή κΈ€μ—μ„œλŠ” μžμ„Έν•œ μ˜ˆμ‹œμ™€ ν•¨κ»˜ μ•Œκ³ λ¦¬μ¦˜μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 이 글을 톡해 μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” 방법을 효율적으둜 읡힐 수 μžˆμŠ΅λ‹ˆλ‹€.

2. μ΅œλŒ“κ°’ κ΅¬ν•˜κΈ°

주어진 int λ°°μ—΄μ—μ„œ μ΅œλŒ“κ°’μ„ κ΅¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ„ ν˜• 탐색을 μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μˆœνšŒν•˜λ©΄μ„œ ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’κ³Ό λΉ„κ΅ν•˜λ©΄ λ©λ‹ˆλ‹€.

  1. λ°°μ—΄μ˜ 첫 번째 μš”μ†Œλ₯Ό μ΅œλŒ“κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
  2. 배열을 μˆœνšŒν•˜λ©° λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’κ³Ό λΉ„κ΅ν•©λ‹ˆλ‹€.
  3. ν˜„μž¬ μš”μ†Œκ°€ μ΅œλŒ“κ°’λ³΄λ‹€ 크닀면 μ΅œλŒ“κ°’μ„ ν˜„μž¬ μš”μ†Œλ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  4. λͺ¨λ“  λ°°μ—΄ μš”μ†Œλ₯Ό ν™•μΈν•œ ν›„ μ΅œλŒ“κ°’μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ•„λž˜μ˜ μ˜ˆμ‹œ μ½”λ“œλŠ” 이 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€.

def find_max(arr):
    max_val = arr[0] # 첫 번째 μš”μ†Œλ‘œ μ΄ˆκΈ°ν™”
    for i in range(1, len(arr)):
        if arr[i] > max_val:
            max_val = arr[i]
    return max_val

μœ„μ˜ μ½”λ“œλ₯Ό κ°„λ‹¨νžˆ μ„€λͺ…ν•˜μžλ©΄, λ°°μ—΄μ˜ 첫 번째 μš”μ†Œλ₯Ό μ΅œλŒ“κ°’μœΌλ‘œ μ„€μ •ν•˜κ³ , 배열을 μˆœνšŒν•˜λ©° ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’κ³Ό λΉ„κ΅ν•˜μ—¬ 더 큰 값을 μ΅œλŒ“κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ°°μ—΄μ˜ 크기에 λΉ„λ‘€ν•˜λŠ” μ‹œκ°„μ΄ 걸리기 λ•Œλ¬Έμ— μ„ ν˜• μ‹œκ°„ λ³΅μž‘λ„ O(n)을 κ°€μ§‘λ‹ˆλ‹€.

이제 주어진 int λ°°μ—΄μ—μ„œ μ΅œλŒ“κ°’μ„ κ΅¬ν•˜λŠ” 방법을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. λ‹€μŒμœΌλ‘œ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

3. μ΅œμ†Ÿκ°’ κ΅¬ν•˜κΈ°

주어진 int λ°°μ—΄μ—μ„œ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΅œλŒ“κ°’μ„ κ΅¬ν•˜λŠ” 방법과 μœ μ‚¬ν•˜κ²Œ λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μˆœνšŒν•˜λ©΄μ„œ ν˜„μž¬κΉŒμ§€μ˜ μ΅œμ†Ÿκ°’κ³Ό λΉ„κ΅ν•˜λ©΄ λ©λ‹ˆλ‹€.

  1. λ°°μ—΄μ˜ 첫 번째 μš”μ†Œλ₯Ό μ΅œμ†Ÿκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
  2. 배열을 μˆœνšŒν•˜λ©° λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό ν˜„μž¬κΉŒμ§€μ˜ μ΅œμ†Ÿκ°’κ³Ό λΉ„κ΅ν•©λ‹ˆλ‹€.
  3. ν˜„μž¬ μš”μ†Œκ°€ μ΅œμ†Ÿκ°’λ³΄λ‹€ μž‘λ‹€λ©΄ μ΅œμ†Ÿκ°’μ„ ν˜„μž¬ μš”μ†Œλ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  4. λͺ¨λ“  λ°°μ—΄ μš”μ†Œλ₯Ό ν™•μΈν•œ ν›„ μ΅œμ†Ÿκ°’μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ•„λž˜μ˜ μ˜ˆμ‹œ μ½”λ“œλŠ” 이 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€.

def find_min(arr):
    min_val = arr[0] # 첫 번째 μš”μ†Œλ‘œ μ΄ˆκΈ°ν™”
    for i in range(1, len(arr)):
        if arr[i] < min_val:
            min_val = arr[i]
    return min_val

μœ„μ˜ μ½”λ“œλ₯Ό κ°„λ‹¨νžˆ μ„€λͺ…ν•˜μžλ©΄, λ°°μ—΄μ˜ 첫 번째 μš”μ†Œλ₯Ό μ΅œμ†Ÿκ°’μœΌλ‘œ μ„€μ •ν•˜κ³ , 배열을 μˆœνšŒν•˜λ©° ν˜„μž¬κΉŒμ§€μ˜ μ΅œμ†Ÿκ°’κ³Ό λΉ„κ΅ν•˜μ—¬ 더 μž‘μ€ 값을 μ΅œμ†Ÿκ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΅œλŒ“κ°’ κ΅¬ν•˜κΈ°μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ„ ν˜• μ‹œκ°„ λ³΅μž‘λ„ O(n)을 κ°€μ§‘λ‹ˆλ‹€.

이제 주어진 int λ°°μ—΄μ—μ„œ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” 방법도 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ λ™μ‹œμ— κ΅¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

4. μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’ λ™μ‹œμ— κ΅¬ν•˜κΈ°

주어진 int λ°°μ—΄μ—μ„œ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ λ™μ‹œμ— κ΅¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 이 μ•Œκ³ λ¦¬μ¦˜μ€ 배열을 ν•œ 번만 μˆœνšŒν•˜λ©΄μ„œ λ™μ‹œμ— μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. λ°°μ—΄μ˜ 첫 번째 μš”μ†Œλ₯Ό λ™μ‹œμ— μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
  2. 배열을 μˆœνšŒν•˜λ©° λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’κ³Ό λΉ„κ΅ν•©λ‹ˆλ‹€.
  3. ν˜„μž¬ μš”μ†Œκ°€ μ΅œλŒ“κ°’λ³΄λ‹€ 크닀면 μ΅œλŒ“κ°’μ„ ν˜„μž¬ μš”μ†Œλ‘œ μ—…λ°μ΄νŠΈν•˜κ³ , ν˜„μž¬ μš”μ†Œκ°€ μ΅œμ†Ÿκ°’λ³΄λ‹€ μž‘λ‹€λ©΄ μ΅œμ†Ÿκ°’μ„ ν˜„μž¬ μš”μ†Œλ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  4. λͺ¨λ“  λ°°μ—΄ μš”μ†Œλ₯Ό ν™•μΈν•œ ν›„ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ•„λž˜μ˜ μ˜ˆμ‹œ μ½”λ“œλŠ” 이 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€.

def find_max_min(arr):
    max_val = arr[0] # 첫 번째 μš”μ†Œλ‘œ μ΅œλŒ“κ°’ μ΄ˆκΈ°ν™”
    min_val = arr[0] # 첫 번째 μš”μ†Œλ‘œ μ΅œμ†Ÿκ°’ μ΄ˆκΈ°ν™”
    for i in range(1, len(arr)):
        if arr[i] > max_val:
            max_val = arr[i]
        elif arr[i] < min_val:
            min_val = arr[i]
    return max_val, min_val

μœ„μ˜ μ½”λ“œλ₯Ό κ°„λ‹¨νžˆ μ„€λͺ…ν•˜μžλ©΄, λ°°μ—΄μ˜ 첫 번째 μš”μ†Œλ₯Ό λ™μ‹œμ— μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μœΌλ‘œ μ„€μ •ν•˜κ³ , 배열을 μˆœνšŒν•˜λ©° ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’κ³Ό λΉ„κ΅ν•˜μ—¬ 더 큰 값을 μ΅œλŒ“κ°’μœΌλ‘œ, 더 μž‘μ€ 값을 μ΅œμ†Ÿκ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ°°μ—΄μ˜ 크기에 λΉ„λ‘€ν•˜λŠ” μ‹œκ°„μ΄ 걸리기 λ•Œλ¬Έμ— μ„ ν˜• μ‹œκ°„ λ³΅μž‘λ„ O(n)을 κ°€μ§‘λ‹ˆλ‹€.

이제 주어진 int λ°°μ—΄μ—μ„œ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ λ™μ‹œμ— κ΅¬ν•˜λŠ” 방법도 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λ©΄ 배열을 ν•œ 번만 μˆœνšŒν•˜λ©΄μ„œ 두 개의 κ²°κ³Όλ₯Ό λ™μ‹œμ— ꡬ할 수 μžˆμœΌλ―€λ‘œ νš¨μœ¨μ μž…λ‹ˆλ‹€.

5. μ˜ˆμ‹œμ™€ ν•¨κ»˜ μ•Œκ³ λ¦¬μ¦˜ μ„€λͺ…

μ•„λž˜μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ΅œμ†Ÿκ°’κ³Ό μ΅œλŒ“κ°’μ„ λ™μ‹œμ— κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 주어진 int 배열이 [4, 8, 2, 6, 1]인 경우λ₯Ό κ°€μ •ν•΄λ΄…μ‹œλ‹€.

  1. λ°°μ—΄μ˜ 첫 번째 μš”μ†ŒμΈ 4λ₯Ό λ™μ‹œμ— μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
  2. 두 번째 μš”μ†ŒμΈ 8을 ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’ 4와 λΉ„κ΅ν•©λ‹ˆλ‹€. 8은 4보닀 ν¬λ―€λ‘œ μ΅œλŒ“κ°’μ„ 8둜 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. λ™μ‹œμ— μ΅œμ†Ÿκ°’κ³Ό λΉ„κ΅ν•˜λ”λΌλ„ 8이 4보닀 ν¬λ―€λ‘œ μ΅œμ†Ÿκ°’μ€ κ·ΈλŒ€λ‘œ 4μž…λ‹ˆλ‹€.
  3. μ„Έ 번째 μš”μ†ŒμΈ 2λ₯Ό ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’ 8κ³Ό λΉ„κ΅ν•©λ‹ˆλ‹€. 2λŠ” 8보닀 μž‘μœΌλ―€λ‘œ μ΅œλŒ“κ°’μ€ κ·ΈλŒ€λ‘œ 8이고, μ΅œμ†Ÿκ°’μ€ 2둜 μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€.
  4. λ„€ 번째 μš”μ†ŒμΈ 6을 ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’ 8κ³Ό μ΅œμ†Ÿκ°’ 2와 λΉ„κ΅ν•©λ‹ˆλ‹€. 6은 8보닀 μž‘μœΌλ―€λ‘œ μ΅œλŒ“κ°’μ€ κ·ΈλŒ€λ‘œ 8이고, 6은 2보닀 ν¬λ―€λ‘œ μ΅œμ†Ÿκ°’μ€ κ·ΈλŒ€λ‘œ 2μž…λ‹ˆλ‹€.
  5. λ§ˆμ§€λ§‰ μš”μ†ŒμΈ 1을 ν˜„μž¬κΉŒμ§€μ˜ μ΅œλŒ“κ°’ 8κ³Ό μ΅œμ†Ÿκ°’ 2와 λΉ„κ΅ν•©λ‹ˆλ‹€. 1은 8보닀 μž‘μœΌλ―€λ‘œ μ΅œλŒ“κ°’μ€ κ·ΈλŒ€λ‘œ 8이고, 1은 2보닀 μž‘μœΌλ―€λ‘œ μ΅œμ†Ÿκ°’μ„ 1둜 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  6. λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν™•μΈν•œ ν›„ μ΅œλŒ“κ°’ 8와 μ΅œμ†Ÿκ°’ 1을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ‹œλ₯Ό 톡해 μ΅œμ†Ÿκ°’κ³Ό μ΅œλŒ“κ°’μ„ λ™μ‹œμ— κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ•Œκ³ λ¦¬μ¦˜μ€ 배열을 ν•œ 번만 μˆœνšŒν•˜λ©΄μ„œ λ™μ‹œμ— μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜κΈ° λ•Œλ¬Έμ— νš¨μœ¨μ μž…λ‹ˆλ‹€. μ„ ν˜• μ‹œκ°„ λ³΅μž‘λ„ O(n)을 가지며, 주어진 λ°°μ—΄μ˜ 크기에 λΉ„λ‘€ν•˜λŠ” μ‹œκ°„μ΄ κ±Έλ¦½λ‹ˆλ‹€.

λŒ“κΈ€