프로그래밍/Oracle
[Oracle] 알고리즘 문제 1
eunki
2022. 6. 14. 22:05
728x90
1. 구구단 1단 ~ 9단 출력
with num_table1 as ( select level as num1
from dual
connect by level <= 9 ),
num_table2 as ( select level as num2
from dual
connect by level <= 9 )
select num1 || 'x' || num2 || '=' || num1 * num2 as 구구단
from num_table1, num_table2;
2. 직각 삼각형을 출력
accept p_num prompt '숫자를 입력하세요~ '
with loop_table as ( select level as num1
from dual
connect by level <= &p_num )
select lpad('★', num1, '★')
from loop_table;
3. 정삼각형 출력
with loop_table as ( select level as num1
from dual
connect by level <= 8 )
select lpad(' ', 10 - num1, ' ') || lpad('★', num1, '★')
from loop_table;
lpad(' ', 10 - num1, ' ') 는 num1 에 들어가는 숫자가 10-num1 이므로,
num1 의 숫자가 커질수록 채워지는 공백은 줄어든다.
lpad('★', num1, '★') 는 num1 에 들어가는 숫자만큼 ★ 이 출력된다.
그래서 lpad(' ', 10 - num1, ' ') 와 lpad('★', num1, '★') 를 연결하면 자연스럽게 정삼각형이 그려지게 된다.
4. 마름모 출력
with star1 as ( select level as num1
from dual
connect by level <= 5 ),
star2 as ( select level as num2
from dual
connect by level <= 4
order by num2 desc )
select lpad(' ', 7 - num1, ' ') || lpad('★', num1, '★')
from star1
union all
select lpad(' ', 7 - num2, ' ') || lpad('★', num2, '★')
from star2;
star1 이 출력하는 결과는 1, 2, 3, 4, 5 이고 star2 가 출력하는 결과는 4, 3, 2, 1 이다.
union all 위쪽의 쿼리문의 결과는 삼각형으로 출력되는 쿼리이고,
union all 아래쪽의 쿼리문의 결과는 역삼각형이 출력되는 쿼리다.
5. 사각형 출력
accept width prompt '가로의 숫자를 입력하세요'
accept height prompt '세로의 숫자를 입력하세요'
with loop_table as ( select level as num1
from dual
connect by level <= &height )
select lpad('★', &width, '★')
from loop_table;
728x90