Post

백준 단계별 풀기 (2차원배열)

행렬덧셈

1
2
3
4
5
6
7
8
9
10
11
n, m = map(int, input().split()) # n, m을 입력받음
a = [] # a를 빈 리스트로 초기화
b = [] # b를 빈 리스트로 초기화
for i in range(n): # n번 반복
    a.append(list(map(int, input().split()))) # a에 리스트로 입력받은 값을 추가
for i in range(n): # n번 반복
    b.append(list(map(int, input().split()))) # b에 리스트로 입력받은 값을 추가
for i in range(n): # n번 반복
    for j in range(m): # m번 반복
        print(a[i][j] + b[i][j], end = " ") # a와 b의 각각의 값을 더한 값을 출력
    print() # 줄바꿈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a,b = map(int,input().split())
c = []
d = []

for i in range(a*2):
    if i >= a:
        lis = list(map(int,input().split()))
        c.append(lis)
    else:
        las = list(map(int,input().split()))
        d.append(las)

for z in range(a):
    for m in range(b):
        print(c[z][m]+d[z][m], end =" ")
    print()

리스트안에 리스트를 더하는 방법은 마지막 for 문! ` [][] ` a만큼의 list가 잇고 b만큼의 인자가 있으니 그만큼 더해줌 줄바꿈을 해서 3줄로 나오게 하는게 ! for 문 b만큼 하고나서 한번에 출력 end = “ “ 하고 그다음 개행해서 띄어주고 다시 한 번에!


최대값구하기

1
2
3
4
5
6
7
8
9
10
11
12
table = [list(map(int,input().split()))for _ in range(9)]
max_num=0
max_row, max_col=0,0
for row in range(9):
    for col in range(9):
        if max_num <= table[row][col]:
            max_row=row+1
            max_col=col+1
            max_num=table[row][col]
            
print(max_num)
print(max_row,max_col)

1행 처럼 저렇게도 한번에 리스트 넣기가 가능

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
a = []

for i in range(9):
    lis = list(map(int,sys.stdin.readline().split()))
    a.append(lis)

c = max(map(max, a))
for _ in range(9):
    if c in a[_]:
        b = _
        s = a[b].index(c)

col = s + 1
low = b + 1
print(c)
print(low,col)

` c = max(map(max, a)) ` 중첩리스트의 가장 큰 값 구할 수 있음 map으로


세로읽기

1
2
3
4
5
6
words = [input() for i in range(5)]

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

단어의 최대 길이는 15이다. j가 단어 길이보다 작으면 인덱스 범위 안에 있으므로 출력할 수 있다. 만약에 아웃오브레인지해서 인덱스가 0 이라면 출력을 안함.항상 인덱스길이가 0보다 클때 출력 j(0)먼저 첫열을 5번 출력하고 그다음 j (1) 두번째 열을 5번 출력 이런식으로 감 근데 5열을 갓어 근데 ? 길이가 없어 그럼 넘어가고 다음꺼를 출력하는거임 그렇게 15번실행함 다 출력하고 나서도 15번은 확인을 하고 끝냄 어차피 출력은 안함 if 0 이 아닌 이유는 계속 증가 시켜줘야함 len(words[i]) 는 계속 같은 숫자임 0이 되지 않음 그래서 j보다 작을때는 출력을 안하게 그 증가 시킨 값보다 작을때 word가 왜냐면 앞에서 증가시킨 값만큼의 출력했으니 그 뒤로 보내야하지 다시 첫행 첫열로 시작하는게 아니기때문

if를 안해주면 그냥 계속 15까지 출력해서 아웃오브레인지가 되어버림

인덱스가 0의 범위와 목록의 길이에 있는지 확인해야 합니다.

1
2
3
4
5
6
7
8
fruit_list = ["Apple", "Banana", "Pineapple"]

for index in range(0, 5):
    if 0 <= index < len(fruit_list):
        print("Index ", index, " in range")
    else:
        print("Index ", index, " not in range")
1
2
3
4
5
6
a = [input() for i in range(5)]

for j in range(15):
    for z in range(5):
        if j < len(a[z]):
            print(a[z][j], end ="")

마지막에 띄우는게 아니라 “” 닫아줘야함

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
S1=input()
S2=input()
S3=input()
S4=input()
S5=input()

word=[]

for i in range(15):
    if len(S1)>i:
        print(S1[i],end="")
    if len(S2)>i:
        print(S2[i],end="")
    if len(S3)>i:
        print(S3[i],end="")
    if len(S4)>i:
        print(S4[i],end="")
    if len(S5)>i:
        print(S5[i],end="")

이렇게도 푸는데 내 생각에 len으로 index확인하고 출력하는거


색종이 칠하기

a는 2차원 리스트, 즉 행렬이고, b는 1차원 리스트, 즉 벡터

1
2
3
4
5
6
7
a = [[0]*10 for i in range(10)] 
b = [0 * 10 for i in range(10)]

a = ["0" * 10 for i in range(10)]
print(a)

#['0000000000', '0000000000', '0000000000', '0000000000', '0000000000', '0000000000', #'0000000000', '0000000000', '0000000000', '0000000000']

a는 리스트안의 리스트에 10을 곱하는걸 10번해서 10개의 리스트안에 10개의 0이 있는거임 근데 b는 그냥 리스트..그래서 숫자 0에 10을 곱하면 0임 그래서 10만큼00000000 00000000 이렇게 증가하지 않고 그냥 0이 range 10번만큼 0 0 0 0 0 0 0 0 0 0생겨나고 끝남 근데? 만약 문자를 넣었다? 문자는 1이라는 true값을 가지기 때문에 1 곱하기 10이 돼서 10개의 문자가 생겨남 그게 10..

1
2
3
a, b = int(input().split())

print(a,b)

이리하면 int는 먼저 받을때 문자여야한다고함 3 5를 입력햇더니 그러고 나서

1
2
3
4
5
6
a, b = input().split()

print(a,b)

for i in range(a):
    print("hi")

이렇게 햇더니 문자는 int로 쓸 수 없다고 함 그니까 먼저 map을 하고 int를 하는 이유가 int는 int를 int로 못만들고 map은 다가능해서 인듯?

1
2
3
4
5
6
7
8
9
10
11
12
n = int(input())
arr = [[0]*100 for i in range(100)]

for i in range(n):
    a, b = map(int,input().slpit())
    for z in range(b, b+10):
        for x in range(a, a+10):
            arr[z][x] = 1
    ans = 0
    for i in arr:
        ans += sum(i)
print(ans)

ans = 0 을 for문 바깥으로 빼면 마지막으로 더해진 1 들만 출력돼서 안되고 for문안에서 중첩적으로 더해야함 그래서 그 겹친 1의 넓이를 알 수 있게 되는거임

This post is licensed under CC BY 4.0 by the author.