Juwan Park :: 2차원 배열 ㄹ자로 등차수열 채우기 예제

2차원 배열 ㄹ자로 등차수열 채우기 예제

★프로그래밍/Ruby :: 2015. 9. 17. 00:04

모래시계 배열에 이어 이번에는 ㄹ자로 배열 값을 채우는 예제가 있습니다.

이 알고리즘 역시 정보처리기사 기출문제 중에 있습니다.
이것을 루비로 한 번 구현해 보았습니다.

5*5 배열에 적용했을 때 출력될 결과를 미리 그려 보면 다음과 같습니다.

12345
109876
1112131415
2019181716
2122232425


아래 예제는 이를 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

아래는 이 코드를 실행한 스크린샷입니다.

유용하게 활용하시기 바랍니다.

Today    Yday    Tot
Juwan Park
Juwan Park's blog is powered by Daum and .
Contemporary Blue for .
Designed by Juwan Park. Creative Commons License
▲ TOP