알고리즘

💻 [백준][파이썬] 단계별로 풀어보기 - 2차원 배열 모음(2783, 2566, 10798, 2563)

sehee00 2024. 12. 3. 14:18

 

https://www.acmicpc.net/step/2

 

 

💡1차원 배열 입력받기 

arr = list(map(int, input().split()))
  • 띄어쓰기 간격으로 들어오는 경우
  • list(): map의 결과를 배열로 반환 
  • map(int, 리스트): 리스트의 모든 요소를 int로 변환 
arr = []

for i in range(N):
    arr.append(int(input()))
  • Enter 간격으로 들어오는 경우 

 

💡 2차원 배열 입력받기 

arr = []

for i in range(N):    
	arr.append(list(map(int, input().split())))
  • 배열의 세로길이, 즉 열의 길이를 아는 경우에만 사용 가능

2783 행렬 덧셈 

A, B = [], [] 
N, M = map(int, input().split())

for i in range(N):
    A.append(list(map(int, input().split())))


for i in range(N):
    B.append(list(map(int, input().split())))

for i in range(N):
    for j in range(M):
        print(A[i][j] + B[i][j], end = ' ')
    print()

 

 

💡 2차원 행렬의 최대값, 최소값, 합 구하기 - map 함수 이용 

x = [[1,0,-30,6,5],
[3,4,7,8,1],
     [3,2,6,7,1],
     [-1,2,3,6,8],
     [99,1,2,3,6,8]]

print(max(map(max, x))) # 최대값 99
print(min(map(min, x))) # 최소값 -30
print(min(map(max, x))) # 내부 배열의 최대 값들 중에서 가장 작은 값 6
print(max(map(min, x))) # 내부 배열의 최소 값들 중에서 가장 큰 값 1
print(sum(map(sum, x))) # 2차원 배열의 모든 값의 합

 

💡 리스트를 특정 조건에 맞게 출력 - join 함수 이용 

# join 함수는 내부 요소들이 Str 타입일 경우만 가능!
y = [0,1,2,2,3]

print(''.join(map(str,y))) # 01223
print(','.join(map(str,y))) # 0,1,2,2,3
print('\n'.join(map(str,y)))
# 0
# 1
# 2
# 2
# 3

 

2566 최댓값 

A = [] 

for i in range(9):
    A.append(list(map(int, input().split())))

num = max(list(map(max, A)))
print(num)

for i in range(9):
    for j in range(9):
        if num == A[i][j]:
            print(i+1, j+1, end= ' ')

 

10798 세로읽기 

A = [] 
B = "" # 세로로 읽은 문자열 저장

for i in range(5):
    A.append(list(map(str, input().strip())))

# 가장 긴 문자열의 길이 
max_len = max(len(word) for word in A)

for i in range(max_len):
    for j in range(5):
        if i < len(A[j]):
            B += A[j][i]

print(B)
  • 첫 번째 입출력에 맞춰 푸니 두 번째 입출력에서 바로 막혔다. 처음부터 조건에 맞춰 풀자 
  • if i < len(A[j]): 현재 열(i)이 해당 행(A[j])의 길이보다 작은 경우에만 문자를 읽도록 제한 !!! 
  • 예를 들어, i = 4일 때, len(A[3]) = 3. 따라서 A[3][4]는 존재하지 않으므로 IndexError가 발생
 
 

2563 색종이 

  • 이걸 어떻게 풀지 ??? 싶었는데 쉬운 방법이 있었다. 
  • 1X1 픽셀로 생각하면 된다. 
n = int(input())
arr = [[0] * 100 for _ in range(100)]

for _ in range(n):
    a, b = map(int, input().split())
    for i in range(a, a + 10):
        for j in range(b, b + 10):
            arr[i][j] = 1 

cnt = 0 
for i in range(100):
    cnt += arr[i].count(1)

print(cnt)
  • 도화지 크기는 100 * 100으로 고정, 검은색 색종이는 10 * 10의 크기로 고정
  • 열을 돌면서 행마다 1인 값을 찾아서 개수를 세주면 됨 !!!