백준 단계별 풀기 (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의 넓이를 알 수 있게 되는거임