※ 문제의 내용은 제 기억에 의해 복구된 것이므로 기존 시험문제랑 완전히 똑같지는 않습니다. 그냥 참고용으로만 봐주시기 바랍니다.
<문제>
다음은 배열 내에 숫자를 아래의 그림과 같이 역S자 방향으로 채우는 프로그램입니다. 빈 칸 (1) ~ (5)를채우시오.
<해설>
난이도: ★★☆☆☆
문제의 난이도는 정보처리기능사 알고리즘 수준입니다. 정보처리기능사를 따셨다면 쉽게 풀 수 있는 문제입니다. 무엇보다도 프로그램 전체를 보고 전체적인 흐름을 이해하는 것이 중요합니다.
(1)
배열 내에 모든 숫자를 채워넣으려면 ARR(x,y) 에서 x 랑 y 값이 모두 때마다 변경되어야 합니다. 괄호 3번 부분[ ARR( I, (3) ) = N ]을 보면 변수 I가 x로 세팅되어있는데 변수 I 값를 변경해주는 명령문이 없습니다. 때가 되었을 때 변수 I 값이 변경되어야 하므로 정답은 I 입니다.
(2)
괄호 3번 부분을 보면 변수 N 값을 배열에 집어넣고 있습니다. 위의 보조 그림을 보면 숫자가 증가되면서 대입되는데, 숫자를 증가시키는 명령문이 없습니다. 배열에 집어넣을 때마다 숫자가 증가되어야 하므로 정답은 N = N + 1 입니다.
(3)
괄호 1번에서 설명드렸듯이 ARR(x,y) 에서 x 랑 y 값은 때마다 변경되어야 합니다. 이 문제는 ARR(x,y) 중 y 값을 묻고 있습니다. 해당 명령문이 속해있는 반복문( J = A, B, Inc )을 보면 때마다 값이 변경되는 변수는 J 인 것을 알 수 있습니다. 따라서 정답은 J 입니다.
(4)
역S자 모양으로 숫자를 채우려면 ARR(x,y) 에서 x 값은 계속 증가해야되고 y 값은 증가하기도 하고 감소하기도 해야됩니다. 상단의 반복문( J = A, B, Inc )에서 A와 B의 값을 서로 맞바꿔주면 y 값은 증가하기도 하고 감소하기도 하도록 구현할 수 있습니다.
변수 X 값과 변수 Y 값을 서로 맞바꾸는 과정은 위와 같습니다. 아래와 같이 빨강색 대각선을 그어놓으면 쉽게 외우실 수 있습니다. 위의 과정에 근거해서 정답은 SWAP 입니다.
(5)
괄호 4번 해설에서 A와 B의 값을 서로 맞바꾸면 y 값은 증가하기도 하고 감소하기도 하도록 구현할 수 있다고 말씀드렸습니다. 그러나 A > B 이면서 증가 변수(Inc)가 양수이면 A 값에서부터 증가하기만 하므로 더 작은 값인 B에 도달할 수 없게 됩니다. 그래서 결국 무한 루프로 빠지게 됩니다. 이러한 현상을 방지하기 위해 A 값과 B 값을 서로 맞바꿔서 A > B 가 되었을 경우 증가 변수를 음수로 바꿔주어야 합니다. 그리고 다시 A < B 가 되면 다시 양수로 바꿔주어야 합니다. 증가 변수에 때마다 -1을 곱해주면 양수 ↔ 음수 간 전환이 가능합니다. 따라서 정답은 -1 입니다.
<정답>
'IT강의 > 알고리즘' 카테고리의 다른 글
연결 리스트의 종류 (0) | 2021.07.28 |
---|---|
스택과 큐의 차이 (0) | 2021.07.28 |
다익스트라 알고리즘 (1) - 동작 원리 (0) | 2021.07.28 |
크루스칼 알고리즘 (1) - 동작 원리 (0) | 2021.07.28 |
DFS와 BFS의 차이 (0) | 2021.07.20 |