프로그래밍/Oracle
[Oracle] 알고리즘 문제 2
eunki
2022. 6. 14. 22:11
728x90
예제 1. 3개의 숫자를 각각 물어보게 하고, 3개의 숫자에 대한 최대 공약수를 출력
accept num1 prompt '첫 번째 숫자를 입력하세요'
accept num2 prompt '두 번째 숫자를 입력하세요'
accept num3 prompt '세 번째 숫자를 입력하세요'
select max(level)
from dual
where mod(&num1, level) = 0
and mod(&num2, level) = 0
and mod(&num3, level) = 0
connect by level <= &num3;
예제 2. 16과 24의 최소 공배수를 출력
select 16 * 24 / max(level)
from dual
where mod(16, level) = 0
and mod(24, level) = 0
connect by level <= 24;
예제 3. 피타고라스의 정리로 직각 삼각형의 여부를 출력
accept num1 prompt '밑변의 길이를 입력하세요 ~'
accept num2 prompt '높이를 입력하세요 ~'
accept num3 prompt '빗변의 길이를 입력하세요 ~'
select decode(power(&num1, 2) + power(&num2, 2), power(&num3, 2), '직각 삼각형이 맞습니다', '직각 삼각형이 아닙니다') as 결과
from dual;
예제 4. 0에서 1사이의 난수를 출력
select dbms_random.value(0,1)
from dual;
예제 5. 몬테카를로 알고리즘으로 원주율의 근삿값을 출력
accept p_num prompt '정사각형 안에 들어가는 빨간점의 갯수를 입력하세요'
select sum(case when power(x, 2) + power(y, 2) <= 1 then 1 else 0 end) / &p_num * 4 as 원주율
from ( select dbms_random.value(0,1) as x,
dbms_random.value(0,1) as y
from dual
connect by level <= &p_num );
정사각형의 넓이 : 부채꼴의 넓이 = 정사각형의 점의 개수 : 부채꼴의 점의 개수
예제 6. 자연 상수 e 의 값 구하기
with loop_table as ( select level as num
from dual
connect by level <= 100000 )
select result
from ( select num, power((1+1/num), num) as result
from loop_table )
where num = 100000;
728x90