2차원 배열 ㄹ자로 등차수열 채우기 예제
★프로그래밍/Ruby :: 2015. 9. 17. 00:04모래시계 배열에 이어 이번에는 ㄹ자로 배열 값을 채우는 예제가 있습니다.
이 알고리즘 역시 정보처리기사 기출문제 중에 있습니다.
이것을 루비로 한 번 구현해 보았습니다.
5*5 배열에 적용했을 때 출력될 결과를 미리 그려 보면 다음과 같습니다.
1 | 2 | 3 | 4 | 5 |
10 | 9 | 8 | 7 | 6 |
11 | 12 | 13 | 14 | 15 |
20 | 19 | 18 | 17 | 16 |
21 | 22 | 23 | 24 | 25 |
아래 예제는 이를 10*10 배열에 적용했을 때 예제입니다.
# ㄹ자 모양으로 값 채워넣기 예제 # # 규칙 # ㉠ 배열의 맨 처음 위치에는 1을 대입합니다. # ㉡ 그리고 그 오른쪽으로는 2, 3, 4, 5 ... 순으로 한 칸씩 채워 나갑니다. # ㉢ 그 다음 줄은 ㉡에서 채워진 숫자의 다음 숫자를 오른쪽부터 채웁니다. # ㉣ ㉢의 다음 줄은 왼쪽에서부터, 그 다음 줄은 오른쪽에서부터 채웁니다. # ㉤ 이런 식으로 모든 줄을 ㄹ자로 채웁니다. # # 맨 처음에는 1을 대입합니다. # 한 줄씩 채우며, 위에서 멀어질수록 값이 커집니다. # 홀수번째 줄은 오른쪽으로 갈수록 커집니다. # 짝수번째 줄은 왼쪽으로 갈수록 커집니다. # 맨 첫번째 줄은 위치상 0번째 줄입니다. arr_rowsize = 10 # 배열 세로 크기 설정 arr_colsize = 10 # 배열 가로 크기 설정 # 배열을 미리 선언해 둡니다. arr = Array.new(arr_rowsize) { Array.new(arr_colsize, 0) } for i in 0..(arr_rowsize - 1) for j in 0..(arr_colsize - 1) # 짝수번째 줄(실제로는 홀수)이면 왼쪽부터 채웁니다. # 홀수번째 줄(실제로는 짝수)이면 오른쪽부터 채웁니다. i.even? ? k = j : k = arr_colsize - 1 - j arr[i][k] = i * arr_rowsize + j + 1 end end for i in 0..(arr_rowsize - 1) for j in 0..(arr_colsize - 1) # 이제 ㄹ자 배열을 출력합니다. # 일정한 폭으로 가지런히 표시되도록 하기 위해 서식을 지정합니다. print sprintf(" %3d", arr[i][j]) # 공백 + 3바이트 폭 end puts # 개행 end
아래는 이 코드를 실행한 스크린샷입니다.
유용하게 활용하시기 바랍니다.