문제
[지그재그로 숫자 채우기]
풀러 가기
n * m크기의 직사각형에 숫자를 0부터 순서대로 1씩 증가시키며 왼쪽 위에서부터 시작하여 다음과 같이 지그재그 모양으로 숫자들을 쭉 채우는 코드를 작성해보세요.
입력 형식
n과 m이 공백을 사이에 두고 주어집니다.
- 1 ≤ n, m ≤ 100
출력 형식
숫자로 채워진 완성된 형태의 n * m 크기의 사각형을 출력합니다. (숫자끼리는 공백을 사이에 두고 출력합니다.)
Constraints:
시간 제한: 1000ms
메모리 제한: 80MB
입출력 예제
입력:
4 2
출력:
0 7
1 6
2 5
3 4
입력:
5 5
출력:
0 9 10 19 20
1 8 11 18 21
2 7 12 17 22
3 6 13 16 23
4 5 14 15 24
풀이과정
지그재그 모양의 규칙을 파악해 보자
인덱스가 0부터 시작하는 것을 고려하면, 열(col) 번호가 0부터 시작했을 때를 기준으로 아래와 같은 규칙을 갖고있다.
- 열 번호가 짝수인 경우: 한칸씩 내려가며 숫자 채움
- 열 번호가 홀수인 경우: 한칸씩 올라가며 숫자 채움
이를 배열을 시용하면 쉽게 풀릴 수 있음
배열 더 배우러 가기
- 열 번호 0부터 m-1까지 1씩 증가해나가며 이차원 배열을 채워나감
1) 배열 선언하기
n, m = tuple(map(int, input().split()))
answer = [
[0 for _ in range(m)]
for _ in range(n)
]
2) 열 번호가 짝수인 경우
for col in range(m):
if col % 2 == 0:
for row in range(n):
answer[row][col] = count
count += 1
3) 열 번호가 홀수인 경우
for col in range(m):
if col % 2 != 0:
for row in range(n - 1, -1, -1):
answer[row][col] = count
count += 1
4) 출력
for row in range(n):
for col in range(m):
print(answer[row][col], end = ' ')
print()
overview
구현
# 변수 선언 및 입력
n, m = tuple(map(int, input().split()))
answer = [
[0 for _ in range(m)]
for _ in range(n)
]
count = 0
for col in range(m):
if col % 2 == 0:
for row in range(n):
answer[row][col] = count
count += 1
else:
for row in range(n - 1, -1, -1):
answer[row][col] = count
count += 1
# 출력
for row in range(n):
for col in range(m):
print(answer[row][col], end = ' ')
print()
결과
쨔쨘