ํฐ์คํ ๋ฆฌ ๋ทฐ
[Swift] ' % ' ์ฐ์ฐ์๋ ๋ชจ๋๋ก๊ฐ ์๋๋ผ ๋๋จธ์ง์ ๋๋ค. (Remainder Operator)
Horang๐ฏ 2024. 2. 4. 22:52Swift ๋ฌธ๋ฒ์ ๋ํด์ ๊ณต๋ถํ๊ธฐ ์ํด
๊ณต์ ๋ฌธ์๋ฅผ ์ ๋ ํ๊ณ ์ ๋ฆฌํ๋ ๊ธ์ ์ฌ๋ฆฌ๊ธฐ๋ก ํ๋๋ฐ..
๋๋ฌด ํจ์จ์ด ๋จ์ด์ง๋ ๊ฒ ๊ฐ์์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด์
์ ์ ์ฌ๊ธฐ๋ฅผ ๊ฑด๋๋ฆฌ๋ ๋ด์ฉ์ ๋ํด ๊ณต๋ถํ๊ณ
ํด๋น ๋ด์ฉ์ ๊ธ๋ก ๋จ๊ธฐ๊ธฐ๋ก ๋ง์์ ๋จน์์ต๋๋ค!
(๋ฌธ์์ ์ ๋์์๋๋ฐ ๊ตณ์ด ๋ง์ ์๊ฐ์ ํ ์ ํด์ ๋ค์ ์ ๋ฆฌํ๋๊ฒ ์๋ฏธ๊ฐ ์๋ ์ถ์ด..
์ด์ฌํ ๊ณต๋ถํ๊ณ ์ดํดํ๋ ๊ฒ์ ๋ชฉํ๋ฅผ ๋๊ธฐ๋ก ํ์ต๋๋ค.๐)
๊ทธ๋์ ์ค๋์ Swift ๊ณต์๋ฌธ์์ Basic Operators๋ฅผ ์ฝ์ผ๋ฉฐ ์๊ธด ์๋ฌธ์ ๋ํด
๊ณต๋ถํ ๋ด์ฉ์ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
์๋ฌธ์
๋๋จธ์ง ์ฐ์ฐ์ (%)๋ ๋ค๋ฅธ ์ธ์ด์์๋ ๋ชจ๋๋ก ์ฐ์ฐ์ (modulo operator)๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์์ ๋ํ Swift์ ๋์์ ์๋ฐํ ๋งํ๋ฉด ๋ชจ๋๋ก ์ฐ์ฐ์ด ์๋ ๋๋จธ์ง ์ ๋๋ค.
๋ชจ๋๋ก? ๋๋จธ์ง? ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๊ณ ..
% ์ฐ์ฐ์๋ ๋๋จธ์ง๋ฅผ ๊ตฌํด์ฃผ๋ ์ฐ์ฐ์ ์๋์๋์..๐
์์์์๋ ๋ค๋ฅด๋ค๋๊ฒ ๋ฌด์จ ์๋ฏธ์ผ๊น์..?
์ด์ฌํ ์์นญํ๋ฉฐ ์ดํดํ๋ ค๊ณ ํด๋ดค๋๋ฐ..
๋ฑํ '์ด๊ฑด ์ด๊ฑฐ๊ณ , ์ ๊ฑด ์ ๊ฑฐ์ผ.' ๋ผ๊ณ ํ ์ ์๋ ์๋ฃ๋ ๋ฑํ ์๋ ๊ฒ ๊ฐ์์..!
๊ทธ๋์ ์ ๊ฐ ๋๋ฆ๋๋ก ์๊ฐํ remainder์ modulo์ ์ฐจ์ด์ ๋ํด ๋จ๊ฒจ๋ณด๊ฒ ์ต๋๋ค.
(+ modulo operator๋ Python์ ์ฌ์ฉํ์ฌ ์ค๋ช ํ๊ฒ ์ต๋๋ค.)
๋ฌธ์ ์ํฉ
๊ทธ๋ผ ์์ ์ค๋ช ํ๊ธฐ ์ ์,
์ด ๋์ ์ฐจ์ด์ ๋ํด ๊ถ๊ธํ์ง ์์ ๋ถ๋ค์ ๊ถ๊ธ์ฆ์ ์ ๋ฐํ๊ธฐ ์ํด..
์๋ก ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ํฉ์ ๋จผ์ ๋ณด๊ฒ ์ต๋๋ค.
(์ ๋ง modulo๋ remainder์ ์ฐจ์ด๋ฅผ ๊ถ๊ธํด ํ๋ ๊ฑฐ ์๋๊ฒ ์ฃ ..?)
// Swift์ Remainder Operator
print(12 % 5) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 2
print(12 % -5) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 2
print(-12 % 5) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: -2
print(-12 % -5) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: -2
# Python์ Modulo Operator
print(12 % 5) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: 2
print(12 % -5) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: -3
print(-12 % 5) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: 3
print(-12 % -5) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: -2
๋ถ๋ช ๋๊ฐ์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋๋ฐ, ์ ๋ ์ธ์ด์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋์ฌ๊น์ ?
๊ถ๊ธํ์ง ์์ผ์ ๊ฐ์ ?!?!?!
(์๋๋ฉด.. ์์์ ํ์์ฃ .)
์ด์ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ์
์ฐ์ ,
๋ชจ๋๋ก์ ๋๋จธ์ง ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ธ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
a๋ฅผ b๋ก ๋๋ด์ ๋ ๋๋จธ์ง๋ ์์ ์์ ์ด์ฉํ์ฌ ๋ํ๋ผ ์ ์์ต๋๋ค.
[a / b]๋ a๋ฅผ b๋ก ๋๋ด์ ๋์ ๋ชซ์ ๋ํ๋ ๋๋ค.
์๋ฅผ ๋ค์ด,
12๋ฅผ 5๋ก ๋๋ด์ ๋์ ๋๋จธ์ง๋ 2์ด๋ฉฐ, ๋ชซ์ 2์ ๋๋ค.
๋ชซ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ฐจ์ด
๊ทธ๋ ๋ค๋ฉด ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ์์ ๋์ผํ์ง๋ง,
๊ฐ์ด ๋ค๋ฅด๊ฒ ๋์ค๊ณ ์๋ก ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฌ๋ ์ด์ ๋ ๋ฌด์์ผ๊น์?
๊ฐ ์ธ์ด๋ง๋ค [a / b]์ธ, ๋ชซ์ ๊ตฌํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์ด
modulo์ remainder ์ฐ์ฐ์์ ๊ณ์ฐ ๊ฒฐ๊ณผ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ๊ฒ ์ ๋๋ค.
๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ ๋ชซ์ ๊ตฌํด๋ณด๊ฒ ์ต๋๋ค.
Swift์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ' / '์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชซ์ ๊ตฌํ ์ ์์ต๋๋ค.
(12์ 5, ๋ ๋ค Int ํ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ Int ํ์ ์ด ๋์ต๋๋ค.)
// Swift
print(12 / 5) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 2
cf) Swift์์ ๋ชซ์ ๊ตฌํ ๋ ' / ' ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ ์ ์ ์์ต๋๋ค.
python์ ๊ฒฝ์ฐ๋ '//' ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชซ์ ๊ตฌํฉ๋๋ค.
( '/ ' ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํํ ๊ฐ์ ๊ตฌํ๊ธฐ ๋๋ฌธ์ 2.4๊ฐ ๋์ต๋๋ค.)
# Python
print(12 // 5) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: 2
cf) Python์์๋ ๋ชซ์ ๊ตฌํ ๋ ' // ' ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ ์ ์ ์์ต๋๋ค.
โญ๏ธ ์์์ผ ๊ฒฝ์ฐ, ๋ ์ฝ๋์ ๊ฒฐ๊ณผ๋ ๊ฐ์ง๋ง, ์์์ ๊ฒฝ์ฐ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํฉ๋๋ค.
// Swift
print(12 / -5) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: -2
print(-12 / 5) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: -2
print(-12 / -5) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 2
# Python
print(12 // -5) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: -3
print(-12 // 5) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: -3
print(-12 // -5) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: 2
cf) ์ฐ์ , ๊ฐ๊ฐ์ ์ธ์ด์์ ๊ตฌํ ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ์ด์ฉํ์ฌ ์์์ ์ ์ํ ๋๋จธ์ง ์์ด ๋ง๋์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
a๋ก ์์ ๋ค์ ์ ์ํด๋ณด๋ฉด a = b * ๋ชซ + ๋๋จธ์ง
// Swift
// 12, 5
print(5 * 2 + 2) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: a = 12
// 12, -5
print(-5 * (-2) + 2) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: a = 12
// -12, 5
print(5 * (-2) - 2) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: a = -12
// -12, -5
print(-5 * 2 - 2) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: a = -12
# Python
# 12, 5
print(5 * 2 + 2) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: a = 12
# 12, -5
print(-5 * (-3) - 3) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: a = 12
# -12, 5
print(5 * (-3) + 3) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: a = -12
# -12, -5
print(-5 * 2 - 2) # ์ถ๋ ฅ ๊ฒฐ๊ณผ: a = -12
์์ ๋๋จธ์ง ์์ด ์ฑ๋ฆฝํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค!
๊ฒฐ๋ก
๊ฒฐ๋ก ์ ์ผ๋ก, ์ด๋ฌํ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ์ด์ ๋
Swift์ Python์ ๋ชซ์ ๊ตฌํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
Swift์ ' / '์ฐ์ฐ์๋ ๋๋จธ์ง๊ฐ ์์ ๊ฒฝ์ฐ ๋ฒ๋ฆผ์ ํด์ ๋ชซ์ ๊ตฌํ๊ณ ,
Python์ ' // '์ฐ์ฐ์๋ ๋ด๋ฆผ์ ํด์ ๋ชซ์ ๊ตฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฌ๊ธฐ์ ๋ฒ๋ฆผ์ 0์ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊น์ด ์ ์๋ฅผ ์ ํํ๋ ๊ฒ์ด๊ณ ,
๋ด๋ฆผ์ ์์ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊น์ด ์ ์๋ฅผ ์ ํํ๋ ๊ฒ์ ๋๋ค.
Swift
Python
์ด ์ฐจ์ด๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด
-1.3์ผ๋ก ์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
-1.3์ ์ ๋ค๋ก -1๊ณผ -2์ ์ ์๊ฐ ์์ต๋๋ค.
-1๊ณผ -2 ์ค -1์ด 0๊ณผ ๋ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ๋ฒ๋ฆผ์ ํ๋ฉด -1์ด ๋ฉ๋๋ค.
-1๊ณผ -2 ์ค์ -2๊ฐ ๋ ์์ ๋ฐฉํฅ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ๋ด๋ฆผ์ ํ๋ค๋ฉด -2๊ฐ ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ฝ๋ ์์๋ก ํ์ธ๋ณด๊ฒ ์ต๋๋ค.
let num = -1.3
print(trunc(num)) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: -1.0
print(floor(num)) // ์ถ๋ ฅ ๊ฒฐ๊ณผ: -2.0
์์ฝ
์์ฝํ์๋ฉด!
Swift๋ ๋ชซ์ ๊ตฌํ ๋, ๋๋จธ์ง๋ฅผ ๋ฒ๋ฆผํ์ฌ ๋ชซ์ ๊ณ์ฐํฉ๋๋ค.
์ด๋ก ์ธํด, '% ์ฐ์ฐ์' (๋๋จธ์ง ์ฐ์ฐ์)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ๋ฆผ์ด ์ ์ฉ๋์ด ๋๋จธ์ง๊ฐ ๊ตฌํด์ง๋๋ค.
(Swift์ ๊ฐ์ ๋์์ ํ๋ ์ธ์ด ์ค์๋ JS, C# ๋ฑ์ด ์์ต๋๋ค.)
๋ฐ๋ฉด์, Python๊ณผ ๊ฐ์ด '% ์ฐ์ฐ์'๋ฅผ ๋ชจ๋๋ก ์ฐ์ฐ์๋ผ๊ณ ๋ถ๋ฅด๋ ์ธ์ด๋ค์
๋ชซ์ ๊ตฌํ ๋ ๋ฒ๋ฆผ์ด ์๋ ๋ด๋ฆผ์ ํ์ฌ ๋ชซ์ ๊ณ์ฐํฉ๋๋ค. ์ด๋ก ์ธํด, Swift์๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋๊ฒ ๋ฉ๋๋ค.
(Python๊ณผ ๊ฐ์ ๋์์ ํ๋ ์ธ์ด ์ค์๋ Ruby ๋ฑ์ด ์์ต๋๋ค.)
๋ฐ๋ผ์, Swift๋ Modulo Operator๊ฐ ์๋ Remainder Operator๋ก ๋ถ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
๋ํผ์
Apple์ด ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ Remainder Operator๋ฅผ ์ ํํ ์ด์ ๋ฅผ ์ ๋ํผ์ !! ๋ก ์๊ฐํด๋ณด์์ต๋๋ค.
๋ณดํต 12๋ฅผ -5๋ก ๋๋๋ฉด ๋ชซ์ -2.4๊ฐ ๋์ค๊ฒ ์ง๋ง, ๋ชซ์ ์ค์ ๊ฐ๋ณด๋ค ์์์ผ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ ์ ์ ๋ถ๋ถ์์ -1์ ํด์ฃผ์ด ๋ชซ์ ์๊ฐํ๋๋ฐ, ์์์ ๊ฒฝ์ฐ ์ด๋ฐ ์ฒ๋ฆฌ๊ฐ ๋ ๋ณต์กํด์ง๋๋ค.
์์์์ ๋ชซ์ ๋ ์๊ฒ ๋ง๋ค๊ธฐ ์ํด์๋ ์ ์ ๋ถ๋ถ์ -1์ด ์๋ +1์ ํด์ฃผ๊ณ ๋ถํธ๋ฅผ ๋ถ์ฌ์ผ ํฉ๋๋ค.
(12๋ฅผ 5๋ก ๋๋๋ฉด 2.4์ด๊ณ ๋ชซ์ 2์ธ ๋ฐ๋ฉด, 12๋ฅผ -5๋ก ๋๋๋ฉด -2.4์ด๊ณ ๋ชซ์ -3์ ๋๋ค.)
(์ด,์ค,๊ณ ๊ต์ก๊ณผ์ ์์ ์ด๋ ๊ฒ ๊ฐ๋ฅด์ณค๋ ๊ฑฐ ๊ฐ์๋ฐ..! ์๋์๋ ์์ด์..!!)
์ด๋ฐ ์ํฉ์์ Swift์ Remainder Operator๋
์ฌ์ฉ์๊ฐ ๋ ์ฝ๊ฒ ๊ฐ์ ์ถ๋ก ํ ์ ์๋๋ก ๋์์ฃผ๋ ์ธก๋ฉด์ด ์์ ๊ฒ์ผ๋ก ์๊ฐ๋ฉ๋๋ค.
์ด๋ฌํ ํธ์์ฑ ๊ณ ๋ ค๊ฐ Apple์ ์ค๊ณ ์ ํ์ ์ํฅ์ ๋ฏธ์ณค์ ๊ฒ์ผ๋ก ์กฐ์ฌ์ค๋ฝ๊ฒ ์ถ์ธกํด๋ด ๋๋ค. ๐ค๐
๋ง๋ฌด๋ฆฌ
Modulo Operator์ Remainder Operator์ ๋์ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ ์
๋๋จธ์ง ์์ ๋์ ํ์ฌ ์ธ๋ถ์ ์ผ๋ก ์ดํด๋ดค์ต๋๋ค
์์ง๊น์ง '๋ชจ๋๋ก ์ฐ์ฐ์๋ ~~๊ณ , ๋๋จธ์ง ์ฐ์ฐ์๋ ~~์ผ' ๋ผ๊ณ ๋งํ ์ ์๋ ํ์คํ ์ ์๋ ์์ง๋ง,
๋ ๋ฐฉ์์ ์ฐจ์ด๋ฅผ ํ์คํ ์ดํดํ๊ณ ์ธ์ด๋ง๋ค์ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ๋์ ๋ฐฉ์์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ชป๋ ๋ด์ฉ์ด๋ ๊ถ๊ธํ์ ์ ์ด ์๋ค๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์. ๐ค
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
/(::) | Apple Developer Documentation
%(::) | Apple Developer Documentation
https://github.com/apple/swift/blob/main/stdlib/public/core/Integers.swift
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Swift์ ํ์ ์บ์คํ (Type Casting) (1) | 2024.06.12 |
---|---|
[Swift] Docs_(1) The Basics (0) | 2024.01.23 |
- ์คํ
- Swift
- tipkit
- 5397
- gitkraken
- BOJ
- containerView
- 2024๋ ๋ชฉํ
- 10808
- 4949
- ์๋ฃ ๊ตฌ์กฐ
- ์์ด ๋ด์ค
- ๊ดํธ์ ๊ฐ
- C++
- Anyobject
- ๊ณต๊ฐ ๋ณต์ก๋
- root view controller
- pageViewController
- Container View Controller
- ์์ด ๊ณต๋ถ
- ํ
- ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ๊ท ํ์กํ ์ธ์
- ๊ท๋๋ผ๋ฏธ ์์ด
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- remainder
- ๊ท๋๋ผ๋ฏธ ์์ด
- 2023๋ ํ๊ณ
- ์ ๋ง๋๊ธฐ
- ๋ฒ์ฉ๊ณ ์ ์๋ณ
- Total
- Today
- Yesterday