[BAEKJOON] 7단계_ 2차원 배열 본문

IT/코테문제

[BAEKJOON] 7단계_ 2차원 배열

호랑구야 2023. 10. 26. 09:00

 

julia319 정보

시도했지만 맞지 못한 문제

www.acmicpc.net

 

2738번 행렬 덧셈

2차원 행렬을 만들 때는 행, row, 줄 단위로 리스트를 만들어 빈 리스트에 추가하면 된다.

# 행(줄)의 수, N과 열(칸)의 수 M
N, M = map(int, input().split())
# 입력 행렬 A, B와 출력 행렬 ans를 담을 빈 리스트를 선언한다.
A, B, ans = [], [], []

# 행, 줄의 수 만큼 입력 받는다.
for _ in range(N):
    row = list(map(int, input().split()))
    A.append(row)
    
for _ in range(N):
    row = list(map(int, input().split()))
    B.append(row)

# 출력 행렬 ans를 만드는 반복문
for row in range(N):
    # 임시 행을 넣을 빈 리스트
    tmp = []
    # A와 B 행렬의 행 별로 값을 더해 빈 리스트로 추가한다.
    for col in range(M):
        tmp.append(A[row][col] + B[row][col])
    # 모든 열의 계산이 끝나면, 임시 행을 출력 행렬에 추가한다.
    ans.append(tmp)

# 행 단위로 다음 줄로 넘어감
for row in range(N):
    # 열 단위로 한 칸씩 띄워짐
    for col in range(M):
        print(ans[row][col], end = ' ')
    print()

 

2566번 최댓값

배열의 행별로 최댓값을 구하고, 기존의 최댓값을 저장해둔 변수와 비교하여 새로운 것이 더 클 경우 값을 교체하고, 최댓값의 행과 열의 인덱스 값 +1 한 값을 최댓값의 행과 열의 변수에 저장한다.

A = []
# 입력 행렬 2차원 행렬 형태로 만드는 부분
for _ in range(9):
    row = list(map(int, input().split()))
    A.append(row)

# 최댓값 변수, 초기: 0, 문제에서 81개의 자연수 혹은 0이 주어진다고 했으므로
Max = 0
for r in range(9):
    # 행별로 가장 큰 수를 tmp 변수에 저장한다.
    tmp = max(A[r])
    # 만약 기존 최댓값이 크다면 계속 진행한다.
    if Max > tmp:
        continue;
    # 아니라면 최댓값 변수값을 변경하고
    # 그 위치의 행과 열의 인덱스 값에 + 1한 것을 저장한다.
    else:
        Max = tmp
        row = r + 1
        col = A[r].index(tmp) + 1
print(Max)
print(row, col, sep = ' ')

 

 

 

10798번 세로 읽기

입력되는 문자열 중 가장 긴 것을 기준으로 for문을 돌린다. 문자열을 돌아가면 출력할 때 인덱스 오류가 나지 않도록 조건문을 걸어둔다. 주어진 문자열의 길이가 주어진 인덱스 번호보다 클 때만 출력하고 아닐 때는 그냥 지나가게 한다. 필요하지 않아 명시하지 않았지만, else: continue;와 같은 구문을 추가하여 과정을 명확하게 할 수는 있다.

# 문자열을 저장할 리스트
A = []
# 문자열 길이 중 가장 큰 값을 저장할 변수
L = 0

# 다섯줄 입력
for _ in range(5):
    str = input()
    # 주어진 문자열의 길이와 기존 문자열 길이 값 중 더 큰 것을 L에 다시 배정
    L = max(L, len(str))
    # 문자열 저장할 리스트에 추가
    A.append(str)

# 입력 문자열 길이 중 가장 큰 것만큼 루프를 돌린다.
for i in range(L):
    # 문자열들을 하나씩 돌아가며 출력한다.
    for j in A:
        # 만약 주어진 문자열의 길이가 인덱스 번호보다 크다면 출력
        if i < len(j):
            print(j[i], end = '')

 

2563번 색종이

종이의 영역을 100개짜리 0이 100개 모여있는 배열로 나타낼 수 있다. 주어진 x, y 좌표에 10을 더한만큼씩을 1로 바꾸어 중복으로 덮여도 똑같이 계산할 영역으로 두었다. 중첩 리스트는 내부의 독립적인 1차원 리스트들에 method를 활용할 수 있으므로 활용할 때 기억해두는 것이 좋다.

# 가로 세로 100인 흰 종이 표현, 0~99
A = [[0 for _ in range(100)] for _ in range(100)]
N = int(input())

for _ in range(N):
    # 시작 x좌표 y좌표
    x, y = map(int, input().split())
    # 흰 종이 좌표가 0에서 시작하므로
    # 검은 종이 좌표도 0부터 시작하는 것으로 바꾸기 위해 1을 뺀다.
    x -= 1
    y -= 1
    
    # 검은 종이는 가로 10 세로 10
    for w in range(x, x + 10):
        for v in range(y, y + 10):
            # 검다는 표현으로 1로 값을 바꿔줌
            A[w][v] = 1
    
ans = 0
# 종이의 가로 한 줄씩 1의 갯수를 세어
# 전체 갯수 ans에 누적하여 저장한다.
for a in A:
    ans += a.count(1)
    
print(ans)
반응형

'IT > 코테문제' 카테고리의 다른 글

[BAEKJOON] 9단계_약수, 배수와 소수  (0) 2023.10.30
[BAEKJOON] 8단계_일반 수학1  (0) 2023.10.27
[Python] 문제 풀 때 요령_231014  (0) 2023.10.25
[BAEKJOON] 6단계_심화1  (1) 2023.10.24
[BAEKJOON] 5단계_문자열  (0) 2023.10.23
Comments