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 51    Yday 43    Tot 79,356
Juwan Park
Juwan Park's blog is powered by Daum and TISTORY.
Contemporary Blue for TISTORY.
Designed by Juwan Park. Creative Commons License
▲ TOP