λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ‘¨‍πŸ’» web.dev/log

μ™œ index λŠ” 0λΆ€ν„° μ‹œμž‘ν• κΉŒ?

by HandHand 2023. 3. 12.

 

μ–Όλ§ˆμ „ ν”„λ‘œκ·Έλž˜λ°μ„ 이제 막 μ‹œμž‘ν•œ 지인뢄이 λ‹€μŒ μ§ˆλ¬Έμ„ μ£Όμ…¨μŠ΅λ‹ˆλ‹€.

이제 막 ν”„λ‘œκ·Έλž˜λ°μ„ μ‹œμž‘ν•œ μ‚¬λžŒμ΄λΌλ©΄ λˆ„κ΅¬λ‚˜ ν•œλ²ˆ μ―€ μ˜λ¬Έμ„ ν’ˆμ„λ§Œν•œ 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

 

μ™œ λ°°μ—΄μ˜ index κ°€ 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” κ²ƒμΈκ°€μš”?

 

μ € λ˜ν•œ 처음 Cμ–Έμ–΄λ‘œ ν”„λ‘œκ·Έλž˜λ°μ— μž…λ¬Έ ν–ˆμ„ λ•Œ 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” 인덱싱 체계가 λ‚―μ„€μ—ˆμ§€λ§Œ

κ·Έλ•Œ λ‹Ήμ‹œμ—λŠ” κ·Έλƒ₯ κ·ΈλŸ°κ°€λ³΄λ‹€~ ν•˜κ³  받아듀이고 λ„˜μ–΄κ°”μ—ˆλŠ”λ°,

이번 κΈ°νšŒμ— μ•Œμ•„λ³΄λ©΄ 쒋을 것 κ°™λ‹€λŠ” 생각이 λ“€μ–΄μ„œ 이와 κ΄€λ ¨λœ λͺ‡κ°€μ§€ 배경을 찾아보고 μ •λ¦¬ν•΄λ΄€μŠ΅λ‹ˆλ‹€.

 

πŸ“Œ TL;DR

0λΆ€ν„° μ‹œμž‘ν•˜λŠ” μΈλ±μŠ€λŠ” μžμ—°μŠ€λŸ½κ³  직관적이며, λ°°μ—΄μ˜ 첫 번째 μ›μ†Œκ°€ 항상 0번 μΈλ±μŠ€λΌλŠ” μ μ—μ„œ 이점이 μžˆλ‹€.

또 λ‹€λ₯Έ μ΄μœ λŠ”, 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” μΈλ±μŠ€λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ³„μ‚°ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄μ€€λ‹€.

 

πŸ“Œ μžμ—°μŠ€λŸ½κ³  직관적이닀

0-based κ°€ 직관적인 μ΄μœ λŠ” ꡬ간 을 λ‚˜νƒ€λ‚΄λŠ” 방법을 λ¨Όμ € μ •μ˜ν•˜λŠ” 것을 톡해 λ„μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΅œλ‹¨κ²½λ‘œ μ•Œκ³ λ¦¬μ¦˜ 으둜 유λͺ…ν•œ λ‹€μ΅μŠ€νŠΈλΌ λŠ” κ·Έκ°€ μž‘μ„±ν•œ ν•˜λ‚˜μ˜ λ©”λͺ¨λ₯Ό 톡해

ꡬ간을 ν‘œν˜„ν•˜λŠ” λ‹€μŒ 4가지 ν‘œν˜„μ‹ 쀑 κ°€μž₯ μžμ—°μŠ€λŸ½κ³  직관적인 방법을 λ„μΆœν•˜λŠ” ν•˜λ‚˜μ˜ μ˜κ²¬μ„ μ œμ•ˆν–ˆμŠ΅λ‹ˆλ‹€.

 

a. 2 <= i < 13
b. 1 < i <= 12
c. 2 <= i <= 12
d. 1 < i < 13

 

μœ„ 4가지 방법쀑에 μ–΄λ–€κ±Έ μ‚¬μš©ν•˜λŠ”κ²Œ μ’‹μ„κΉŒμš”?

κ°€μž₯ μž‘μ€ μžμ—°μˆ˜ N 을 ν¬ν•¨ν•˜λŠ” ꡬ간을 ν‘œν˜„ν•œλ‹€κ³  κ°€μ •ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

μ΄λ•Œ lower bound μ—μ„œ 경계값을 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄(<) 그보닀 μž‘μ€ μž„μ˜μ˜ μ‹€μˆ˜κ°’μ„ μ‚¬μš©ν•΄μ•Όν•˜μ§€λ§Œ,

경계값을 ν¬ν•¨ν•˜λ„λ‘ ν•˜λ©΄() μ˜λ„μ— μ’€ 더 λ§žλŠ” ν‘œν˜„ 방법이 될 수 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

λ˜ν•œ upper bound μ—μ„œλŠ” 경계값을 포함할 경우 μ‹€μˆ˜κ°’μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 이상 곡집합을 ν‘œν˜„ν•˜κΈ°κ°€ λΆˆκ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

 

λ”°λΌμ„œ μ΄λŸ¬ν•œ μ΄μœ λ“€ λ•Œλ¬Έμ— a 와 같은 λ°˜λ‹«νžŒκ΅¬κ°„ 을 μ‚¬μš©ν•˜λ©΄

μ’€ 더 μ˜λ―Έμ— 맞고 직관적인 ν‘œν˜„μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

이제 μΈλ±μŠ€κ°€ 0λΆ€ν„° μ‹œμž‘ν•˜λŠ”κ²Œ μžμ—°μŠ€λŸ¬μš΄ 이유λ₯Ό μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

총 길이가 N 인 λ°°μ—΄μ˜ ꡬ간을 ν‘œν˜„ν•˜κ³  μ‹Άλ‹€λ©΄ λ‹€μŒ 두 가지 방법이 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

 

1. 1 <= i < N + 1 // βœ… 1-based

2. 0 <= i < N // βœ… 0-based

 

λ‘λ²ˆμ§Έ 방법인 0-based λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹«νžŒ κ΅¬κ°„μ˜ 수λ₯Ό 보기만 해도

μˆ˜μ—΄μ˜ 길이가 N μž„μ„ λ°”λ‘œ 계산할 수 있으며 μ΄λŠ” 연속적인 κ΅¬κ°„μ—μ„œλ„ 훨씬 μ§κ΄€μ μž…λ‹ˆλ‹€.

 

πŸ“Œ λ©”λͺ¨λ¦¬ μ£Όμ†Œ 계산이 μ‰¬μ›Œμ§„λ‹€

C와 같은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ νŠΉμ • μ˜μ—­μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” κΈ°μ€€ μ£Όμ†Œμ™€ offset 으둜 κ³„μ‚°λ©λ‹ˆλ‹€.

κΈ°μ€€ μ£Όμ†Œκ°€ a 이고 각 ν”„λ ˆμž„μ˜ 크기가 s 라고 ν• λ•Œ,

i 번째 ν”„λ ˆμž„μ˜ μ£Όμ†Œκ°’μ€ λ‹€μŒκ³Ό 같은 λ“±μ°¨μˆ˜μ—΄μ˜ μΌλ°˜ν•­μ„ 톡해 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

a + s * (i - 1) // βœ… 1-based

a + s * i // βœ… 0-based

 

μ—¬κΈ°μ„œ 0-based 방식은 λŸ°νƒ€μž„μ— κ³„μ‚°ν•˜κΈ°μ— 쒀더 νš¨μœ¨μ μ΄λΌλŠ” 이점이 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ μ΄λŠ” λͺ¨λ“ˆλŸ¬ 연산을 ν†΅ν•œ 인덱슀 맀핑을 μˆ˜ν–‰ν• λ•Œλ„ κ°„κ²°ν•˜κ²Œ ν‘œν˜„μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

 

μ•žμ„œ μ‚΄νŽ΄λ³Έ μ΄λŸ¬ν•œ μ—¬λŸ¬κ°€μ§€ μž₯점듀 λ•Œλ¬Έμ— λ§Žμ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ

0-based indexing 을 μ±„νƒν•΄μ„œ μ§€κΈˆκΉŒμ§€ 널리 μ‚¬μš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. πŸ˜„

 

πŸ“Œ 참고자료

Zero-based numbering

λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€