백준 단계별로 풀어보기 - 7단계: 2차원 배열

Kim So-Myoung·2024년 2월 15일
0
post-thumbnail

7단계: 2차원 배열

2738: 행렬 덧셈

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

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

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

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

2566: 최댓값

array = []
maxNum = 0 # 최댓값 변수 0으로 초기화
maxRow, maxCol = 0, 0

for _ in range(9):
    array.append(list(map(int, input().split())))

for row in range(9):
    for col in range(9):
        if(array[row][col] >= maxNum): # >= 이어야 격자판의 값이 0일 경우에도 if문을 탐
            maxNum = array[row][col]
            maxRow, maxCol = row + 1, col + 1 
            # index = 0~8 / 보기의 격자판 = 1부터 count, 1~9

print(maxNum)
print(f'{maxRow} {maxCol}')

❗ 유의사항

문제에서 격자판의 값으로 81개의 자연수 또는 0이 주어진다고 했으므로,
1. 최댓값을 0으로 초기화 -> if(array[row][col] >= maxNum):
2. 최댓값을 -1로 초기화 -> if(array[row][col] > maxNum):

두가지 방법 중 하나로 구현해야 격자판의 값이 0일 경우에도 if 문을 탄다.

10798: 세로 읽기

words = [input() for _ in range(5)]
length = [len(word) for word in words]

for j in range(max(length)):
    for i in range(len(words)):
        if(j < length[i]):
            print(words[i][j], end='')

❗ 유의사항
- words, length: 1차원 배열
- words[i][j]: ❌ 2차원 배열로의 접근 ❌
1차원 배열 요소에 접근 후 해당 요소 문자열의 index 값에 접근하여 문자를 가지고 오는 것
- 배열이 복잡하면 종이에 예시를 쓰고 어떤식으로 호출할지 그려보는 과정이 필요

💡 문자열을 여러 줄 입력 받아 배열로 표현하기

형식: [ (배열에 넣을 값 선언) (for문) ]
  1. 1차원 배열 생성
    1.1. 코드

    words = [input() for _ in range(5)]
    print(words)

    1.2. 입력

    ABCDE
    abcde
    01234
    FGHIJ
    fghij

    1.3. 출력

    ['ABCDE', 'abcde', '01234', 'FGHIJ', 'fghij']
  2. split 함수를 이용한 2차원 배열 생성
    2.1. 코드

    words = [input().split() for _ in range(5)] #split()는 공백을 구분자로 사용
    print(words)

    2.2. 입력

    A B C D E
    a b c d e
    0 1 2 3 4
    F G H I J
    f g h i j

    2.3. 출력

    [['A', 'B', 'C', 'D', 'E'], ['a', 'b', 'c', 'd', 'e'], ['0', '1', '2', '3', '4'], ['F', 'G', 'H', 'I', 'J'], ['f', 'g', 'h', 'i', 'j']]

2563: 색종이

코드 작성예정

✏️ Solution & Idea
- 100 100 도화지 배열 생성
- 색종이가 붙여 있지 않은 면: 0
- 색종이가 붙은 면: 1
- 도화지 배열에서 색종이를 붙이는(값을 1로 set하는) 위치: 가로: x ~ x + 10, 세로: y ~ y + 10 (색종이의 넓이: 10
10)
- 100 * 100 2차원 배열에서 1의 개수의 총합이 검은색 영역의 넓이가 됨
- 2차원 배열을 순회하며 1 찾기: row(행) 단위로 for문을 돌면 리스트가 요소가 되는데, 이 때 리스트는 col(열)의 정보이다.
- 리스트값.count(1)

💡 2차원 배열 선언
코드

array = [[0 for _ in range(5)] for _ in range(5)]
print(array)

출력

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
profile
Full-Stack Engineer

0개의 댓글