좋은 프로그래머가 되려면 수학을 알아야 하나요?
따라 다릅니다!
하루 종일 CRUD 앱을 작성할 예정이라면 수학을 많이 알 필요가 없을 것입니다.
그러나 코딩 문제를 해결하고 코딩 인터뷰를 준비하는 것과 같이 더 흥미로운 일을 하고 싶다면 몇 가지 기본 개념을 배우는 것이 도움이 됩니다.
오늘 배울 내용 :
- 모듈로 연산자(
%
) - 숫자 체계
- 비트마스킹
이러한 개념을 Ruby에서 적용하는 방법을 배우게 되므로 실용적인 가이드가 될 것입니다.
해보자!
루비 모듈로 연산자
Ruby 모듈로 연산자는 다음과 같습니다.
%
예, 백분율 기호와 같습니다.
어떤 역할을 하나요?
모듈로 연산자는 나머지 부분을 제공합니다. . 숫자가 짝수인지 홀수인지 확인하는 등의 작업에 사용할 수 있습니다.
네.
Ruby에는 even?
이 있습니다. /odd?
방법.
예 :
8.even? # true 5.even? # false
그러나 숫자가 3으로 나누어 떨어지는지 확인하려면 모듈로 연산자를 사용해야 합니다.
예 :
9 % 3 == 0 # true
더 많은 용도를 살펴보겠습니다!
모듈로 연산자의 실제 사용
모듈로를 사용하여 어떤 숫자가 다른 숫자로 나누어 떨어지는지 확인할 수 있습니다. .
나머지가 0이면 소수입니다.
예 :
고전적인 "FizzBuzz" 코딩 챌린지는 숫자가 3 또는 5로 나누어 떨어지는지 알아내도록 합니다.
if n % 3 == 0 puts "Fizz" end if n % 5 == 0 puts "Buzz" end
modulo
를 사용할 수 있습니다. N번째 작업을 수행하는 연산자입니다.
좋아요 :
(1..10).select { |n| n % 2 == 0 } # [2, 4, 6, 8, 10]
또는 step
를 사용할 수 있습니다. 방법:
(2..10).step(2).to_a # [2, 4, 6, 8, 10]
Divmod 방법 사용
모듈로 연산자의 또 다른 용도는 분을 시간 + 남은 분으로 변환하는 것입니다.
예 :
1시간 30분과 같은 90분이 있습니다.
hours, minutes = 90.divmod(60) # [1, 30]
divmod
주목 방법:
나눗셈과 모듈로(나머지 나눗셈)를 동시에 합니다.
매우 유용합니다!
숫자 체계의 이해
숫자 체계는 숫자를 나타내는 방법입니다.
매일 숫자를 사용할 때 십진법을 사용합니다. .
0123456789
숫자 체계는 숫자와 때로는 문자 집합으로 구성됩니다.
예를 들어 :
16진법은 총 16개의 기호를 사용합니다.
0123456789abcdef
다음은 일반적인 숫자 체계의 표입니다. :
이름 | 기호 개수 | 기호 |
---|---|---|
16진수 | 16 | 0123456789abcdef |
소수점 | 10 | 0123456789 |
8진수 | 8 | 01234567 |
바이너리 | 2 | 01 |
to_s
를 사용하여 Ruby에서 숫자 체계 간에 변환할 수 있습니다. 방법.
십진수에서 변환하는 방법은 다음과 같습니다. (9
)를 바이너리로 (1001
):
9.to_s(2) # "1001"
to_i
를 사용할 수 있습니다. 문자열에 대한 메서드를 사용하여 다시 정수로 변환합니다.
따라서 16진수에서 이동하려면 (ff
)에서 소수점으로 (255
) 다음과 같이 할 수 있습니다.
"ff".to_i(16) # 255
여기서 16은 숫자의 "기호 개수" 또는 밑수입니다.
비트마스킹이란 무엇입니까?
당신은 아마도 매일 생각하지 않을 것입니다 ...
"여기요! 많은 부울 값을 압축해야 합니다. 가능한 한 작은 공간으로."
하지만 언젠가 그렇게 해야 한다면…
도움이 될 수 있는 훌륭한 기술은 "비트마스킹"입니다.
비트마스킹을 사용하면 많은 부울 값을 단일 정수 값으로 묶을 수 있습니다.
그게 어떻게 가능한가요?
개별 비트 사용 그 번호로 구성되어 있습니다.
부울 값은 단일 비트로 나타낼 수 있고 정수 값은 64비트이므로 최대 64개의 부울 값을 단일 숫자로 압축할 수 있습니다.
비트 연산자를 사용할 것입니다.
다음은 표입니다 :
이름 | 기호 | 사용 |
---|---|---|
XOR(배타적 OR) | ^ | 토글 비트 |
그리고 | & | 비트 확인 |
아니요 | ~ | 비트 지우기 |
또는 | | | 비트 설정 |
비트 연산자는 BIT 수준에서 작동하며 이것이 바로 우리가 원하는 것입니다.
다음은 코드 예입니다. :
class Bitmask def initialize @value = 0 end def set(bit) @value |= bit end def clear(bit) @value &= ~bit end def check(bit) (@value & bit) == bit end def to_binary @value.to_s(2) end end bit = Bitmask.new
비트마스킹 사용 방법
이제 set
를 사용할 수 있습니다. , clear
&check
이 데이터 구조로 작업하는 방법. 각 값의 의미를 설명하는 상수를 정의할 수도 있습니다.
예 :
class Bitmask ENGINES_ENABLED = 1 CAPTAIN_ABOARD = 2 SHIELDS_UP = 4 # ... rest of code here end bit = Bitmask.new bit.set(Bitmask::ENGINES_ENABLED) bit.check(Bitmask::ENGINES_ENABLED)
set
에 유효한 값 1 및 2의 거듭제곱(2,4,8,16,32…)을 포함하면 다른 비트를 덮어쓰는 것을 방지할 수 있습니다.
64 + 32 + 1이 있는 경우 저장된 값은 다음과 같습니다.
1100001
루비 수학 방법
Ruby에는 도움이 될 수 있는 몇 가지 내장 수학 방법이 포함되어 있습니다.
우리는 이미 divmod
를 다루었습니다. , even?
&odd?
.
다른 방법은 다음과 같습니다. :
**
/pow
(지수)gcd
(최대공약수)abs
(절대값, 음수 부호 제거)round
(가장 가까운 정수로 반올림)floor
&ceil
(내림/올림)Math.sqrt(n)
(n의 제곱근)Math.log2(n)
(n의 log2)digits
(정수를 숫자의 역 배열로 변환)
예 :
5 ** 2 # 25 -10.abs # 10 300.digits # [0, 0, 3]
Ruby 비디오의 수학
요약
모듈로 %
사용과 같은 몇 가지 흥미로운 수학 트릭을 배웠습니다. 나눗셈의 나머지를 찾기 위해. 나머지를 사용하여 숫자가 다른 숫자로 나누어 떨어지는지 확인할 수 있습니다.
숫자 체계, 비트마스킹 및 비트 연산자에 대해서도 배웠습니다.
이 게시물을 공유하는 것을 잊지 마세요...
아직 구독하지 않으셨다면 RubyGuides 뉴스레터를 구독하세요!