Thinking in Data/[DL] DataSQL
[SQL Quiz] #R004. 미로 찾기 1
띤킹인
2020. 4. 15. 01:34
[SQ020415.001]
1. 문제
다음 제시되는 미로 맵 데이터를 바탕으로 출발점에서 목적지까지 최단 경로를 찾고, 찾은 경로를 맵에 출력하시오.
주) 사용자 정의 프로시져나 사용자 함수 사용 불가. SQL 만 사용
hint) 계층형 탐색 활용
2. 미로 설명
미로찾기 맵은 다음 그림1)과 같은 20x20 구조로 되어 있습니다. 가장자리는 맵의 위치를 확인하기 위한 가이드라인입니다. 맵의 위치는 (행번호,열번호) 으로 표현하며, 가장자리의 위치 가이드라인을 참고하시면 됩니다.
검정색 [2] 는 벽을 의미하고, 흰색 [1] 은 통로를 의미합니다.
미로의 출발은 파란색 [1]의 위치(2,1)에서 시작하며, 목적지는 노란색 [9] 입니다. [9]가 4개 존재하지만, 4개 중 하나만 만나면 탐색을 멈출 수 있습니다.
그림2) 와 같이 탐색 결과는 '*' 문자로 출력되어야 합니다. (색은 설명용이며, 출력은 값만 출력하면 됨)
3. 데이터
미로찾기 맵은 다음과 SQL로 데이터를 생성합니다.
DROP TABLE SQ_MIRO_MAP_20X20 PURGE;
CREATE TABLE SQ_MIRO_MAP_20X20 AS
SELECT M.MDATA
,M.RNO
,C.NO1 CNO
,REGEXP_SUBSTR(M.MDATA,'[0-9]',1,C.NO1) MVAL
FROM
(
SELECT 1 RNO,'22222222222222222222' MDATA FROM DUAL UNION ALL
SELECT 2 RNO,'11111111111112111212' MDATA FROM DUAL UNION ALL
SELECT 3 RNO,'22222221222212221212' MDATA FROM DUAL UNION ALL
SELECT 4 RNO,'21112111211111111212' MDATA FROM DUAL UNION ALL
SELECT 5 RNO,'21212121222222221212' MDATA FROM DUAL UNION ALL
SELECT 6 RNO,'21212121211111111112' MDATA FROM DUAL UNION ALL
SELECT 7 RNO,'21212121212222222222' MDATA FROM DUAL UNION ALL
SELECT 8 RNO,'22212121211111111112' MDATA FROM DUAL UNION ALL
SELECT 9 RNO,'21112121222222212212' MDATA FROM DUAL UNION ALL
SELECT 10 RNO,'21212122299111111212' MDATA FROM DUAL UNION ALL
SELECT 11 RNO,'21212121199222221212' MDATA FROM DUAL UNION ALL
SELECT 12 RNO,'21212121222211111212' MDATA FROM DUAL UNION ALL
SELECT 13 RNO,'21211121212112221212' MDATA FROM DUAL UNION ALL
SELECT 14 RNO,'21222221212222122212' MDATA FROM DUAL UNION ALL
SELECT 15 RNO,'21111111211111121112' MDATA FROM DUAL UNION ALL
SELECT 16 RNO,'22221222212222221222' MDATA FROM DUAL UNION ALL
SELECT 17 RNO,'21111211111111111112' MDATA FROM DUAL UNION ALL
SELECT 18 RNO,'21222222122222222222' MDATA FROM DUAL UNION ALL
SELECT 19 RNO,'21112111111111111112' MDATA FROM DUAL UNION ALL
SELECT 20 RNO,'22222222222222222222' MDATA FROM DUAL
) M
,COPY_T C
WHERE C.NO1 <= 20
;
다음은 실제 처리 결과입니다.
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
* * * * * * * * * * * * * 2 1 1 1 2 1 2
2 2 2 2 2 2 2 * 2 2 2 2 * 2 2 2 1 2 1 2
2 1 1 1 2 * * * 2 1 1 1 * * * * * 2 1 2
2 1 2 1 2 * 2 1 2 2 2 2 2 2 2 2 * 2 1 2
2 1 2 1 2 * 2 1 2 * * * * * * * * 1 1 2
2 1 2 1 2 * 2 1 2 * 2 2 2 2 2 2 2 2 2 2
2 2 2 1 2 * 2 1 2 * * * * * * * 1 1 1 2
2 * * * 2 * 2 1 2 2 2 2 2 2 2 * 2 2 1 2
2 * 2 * 2 * 2 2 2 9 9 * * * * * 1 2 1 2
2 * 2 * 2 * 2 * * 9 9 2 2 2 2 2 1 2 1 2
2 * 2 * 2 * 2 * 2 2 2 2 1 1 1 1 1 2 1 2
2 * 2 * * * 2 * 2 1 2 1 1 2 2 2 1 2 1 2
2 * 2 2 2 2 2 * 2 1 2 2 2 2 1 2 2 2 1 2
2 * * * * * * * 2 1 1 1 1 1 1 2 1 1 1 2
2 2 2 2 1 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2
2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2
2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2
2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2