1. n * n 크기의 0으로 초기화된 2차원 배열 만들기
1. list comprehension 이용
n = 4
arr_2d = [
[0 for _ in range(n)]
for _ in range(n)
]
print(arr_2d)
>> 출력 결과
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
- n * m 크기의 격자라면 다음과 같이 초기화가 가능함
- list comprehension 사용시 n, m 위치에 유의해야 함
n, m = 4, 5
arr_2d = [
[0 for _ in range(m)]
for _ in range(n)
]
print(arr_2d)
>> 출력 결과
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
2. 중첩 반복문을 활용하여 range 함수 사용
n = 4
arr_2d = [[1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]
for i in range(n):
for j in range(n):
print(arr_2d[i][j], end=" ")
print()
- range 없이 리스트 내 각 원소를 바로 접근하는 식으로 표현이 가능함
- 2차원 배열의 원소는 각 행이 되며, 각 행에 있는 원소들을 조회하며 값을 출력함
n = 4
arr_2d = [[1, 2, 3, 4], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16, 17, 18]]
for row in arr_2d:
for elem in row:
print(elem, end=" ")
print()
2. n * n 크기의 격자에 특정 규칙에 맞춰 숫자를 출력하는 문제
예제1
입력
n = 3
출력
1 3 5
7 9 11
13 15 17
- 처음에 크기가 n * n인, 전부 0으로 초기화된 배열을 선언하여, 순서대로 숫자를 2씩 증가시키며 각 칸에 숫자를 적음
- 이때, 숫자를 2씩 증가시키기 위해서 num이라는 변수를 활용함
n = 3
arr_2d = [
[0 for _ in range(n)]
for _ in range(n)
]
num = 1
for i in range(n):
for j in range(n):
arr_2d[i][j] = num
num += 2
# 출력
for row in arr_2d:
for elem in row:
print(elem, end=" ")
print()
예제2
입력
n = 4
출력
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
- 홀수번째 행에 대해서는 우측으로 이동하며 숫자를 적어야 하고, 짝수번째 행에 대해서는 좌측으로 이동하며 숫자를 적는 식으로 코드를 작성함
n = 4
arr_2d = [
[0 for _ in range(n)]
for _ in range(n)
]
num = 1
for i in range(n):
if i % 2 == 0:
for j in range(n):
arr_2d[i][j] = num
num += 1
else:
for j in range(n - 1, -1, -1):
arr_2d[i][j] = num
num += 1
# 출력
for row in arr_2d:
for elem in row:
print(elem, end=" ")
print()
예제3
첫 번째 행은 전부 숫자 1로 이루어져 있고, 두 번째 행 부터는 바로 위의 칸에 적혀있는 숫자에 2를 더해서 적어주는 코드
- 첫 번째 행에 전부 숫자 1을 채움
- 두 번째 행부터 마지막 행까지 전부 숫자를 채움
- 결과를 출력함
n = 3
arr_2d = [
[0 for _ in range(n)]
for _ in range(n)
]
# 1. 첫 번째 행에 전부 숫자 1을 채웁니다.
for j in range(n):
arr_2d[0][j] = 1
# 2. 두 번째 행부터 마지막 행까지 전부 숫자를 채웁니다.
for i in range(1, n):
for j in range(n):
arr_2d[i][j] = arr_2d[i - 1][j] + 2
# 출력
for row in arr_2d:
for elem in row:
print(elem, end=" ")
print()
출력
1 1 1
3 3 3
5 5 5
3. 2차 격자점으로서의 배열
2차 평면 상에 n개의 점이 주어졌을 때, (a, b)가 해당 점들 중 하나인지를 쉽게 판단하는 방법
1. n개의 점들 중 (a, b)가 있는지 직접 확인
a, b = 1, 3
exists = False
for _ in range(n):
r, c = tuple(map(int, input().split()))
if r == a and c == b:
exists = True
print(exists)
하지만 만약 특정 점 (a, b)가 존재하는지를 여러번 확인해야 하는 경우라면, 일일이 모든 점에 대해 확인하는 것은 굉장히 비효율적임
2. 2차원 배열 사용
- 만약 점들의 위치 (r, c)의 범위가 1에서 10 사이라면 다음과 같이 0으로 초기화된 2차원 배열을 만든 뒤, 각 점들이 주어질때마다 해당 위치에 1로 표시해주는 방식으로 해결
- 이때, for문을 11까지 돌아야 함
a, b = 1, 3
placed = [
[0 for _ in range(11)]
for _ in range(11)
]
for _ in range(n):
r, c = tuple(map(int, input().split()))
placed[r][c] = 1
exists = True if placed[a][b] == 1 else False
print(exists)
만약 (2, 5), (3, 2) 이렇게 2개의 점이 주어지는 문제 였다면 placed 배열은 다음과 같음
placed
i/j 0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 1 0 0 0 0 0
3 0 0 1 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0 0 0
- 0번지부터 값을 채우는 식으로 진행하는 것도 가능함
- 이 경우에는 placed 배열의 (r, c)가 아닌 (r - 1, c - 1)에 표기하는 식으로 진행할 수 있음
- 이번에는 11이 아닌 10까지만 배열을 만들어도 됨
a, b = 1, 3
placed = [
[0 for _ in range(10)]
for _ in range(10)
]
for _ in range(n):
r, c = tuple(map(int, input().split()))
placed[r - 1][c - 1] = 1
exists = True if placed[a - 1][b - 1] == 1 else False
print(exists)
이 경우에는 주어진 점이 (2, 5), (3, 2) 인 경우에 placed 배열의 (1, 4), (2, 1)에 1이 표기된 그림으로 그려짐
placed
i/j 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 1 0 0 0 0 0
2 0 1 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
'Python' 카테고리의 다른 글
[코드트리 조별과제] #09. 문자열 입력받아 출력하기, 문자열 리스트 관리 (0) | 2024.08.12 |
---|---|
[코드트리 조별과제] #07. 2차원 배열 입력, 2차원 배열에서 원소에 대한 접근 (0) | 2024.08.06 |
[코드트리 조별과제] #06. 리스트에서 주어진 숫자들 중 최댓값/최솟값 구하기 (0) | 2024.08.05 |
[코드트리 조별과제] #05. 특정 문자가 입력될 때까지 여러 줄 입력 받기 (0) | 2024.08.04 |
[코드트리 조별과제] #04. 특정 위치의 문자 enumerate, 특정 원소의 개수 count (0) | 2024.08.03 |