https://www.acmicpc.net/problem/2563
나의 답
import sys
N = int(sys.stdin.readline())
max_karo = 0
max_sero = 0
result = []
for i in range(N):
N = list(map(int,sys.stdin.readline().split()))
result.append(N)
max_karo = max(max_karo,N[0])
max_sero = max(max_sero,N[1])
arr = [[0 for j in range(max_karo+10)] for i in range(max_sero+10)]
for re in result:
for j in range (re[1],re[1]+10):
for i in range (re[0],re[0]+10):
arr[j][i] = 1
cnt = 0
for i in arr:
cnt+=sum(i)
print(cnt)
효율성은 굉장히 엉망일 듯 하다.
우선 입력받는다.
입력받은 값 중에, 가장 큰 세로 값, 가장 작은 세로 값을 추려낸다.
큰 세로값 X 작은 세로 값 으로 이루어진 0으로 채워진 2차원 배열을 생성한다.
이 때, 각 색종이의 면적에 해당하는 부분을 1로 채운다.
그 다음에, 1로 채워진 부분을 세면 되는데
어짜피 0과 1로 이루어진 것이므로 각 줄마다의 합을 구해 총 합을 구한다
다른 사람 답
N = int(input())
array = [[0] * 100 for _ in range(100)] # 도화지 범위 초기화
for _ in range(N): # 입력 받은 도화지 개수만큼 돈다.
y1, x1 = map(int, input().split()) # 왼쪽아래 x,y 좌표를 받는다.
for i in range(x1, x1 + 10): # 세로를 돈다.
for j in range(y1, y1 + 10): # 가로를 돈다.
array[i][j] = 1 # 해당 범위 값을 0에서 1로 바꿔준다.
result = 0 # 넓이를 출력할 변수
for k in range(100): # 전체 도화지를 돌면서
result += array[k].count(1) # 1 개수만 세어준다
print(result)
원리는 비슷한 듯 하다
애초에 도화지 100X100 크기의 도화지였구나..ㅎ
문제를 제대로 읽어봐야겠다...
알게된 점
2차원 배열 입력받는 것은 항상 헷갈린다....
arr = [[0 for j in range(max_karo+10)] for i in range(max_sero+10)]
[0 for _ in range (N)] => 0으로 채워진 길이가 N인 1차원 배열
이 배열을 M 개 만든다?
[[0 for _ in range(N)] for _ in range(M)]
M*N인 2차원 배열이 만들어지는 것.
그리고 2차원 배열에서 count랑 sum 은 안되는 군..1차원에서 되는 구나
'코딩테스트' 카테고리의 다른 글
[Python] 백준 25757번 - 임스와 함께하는 미니게임 (0) | 2024.06.20 |
---|---|
[Python] 백준 10431번 - 줄세우기 (0) | 2024.06.13 |
[Python] 백준 1158번 - 요세푸스 문제 (1) | 2024.06.11 |
[Python] 백준 10866번 - 덱 (0) | 2024.06.10 |
[Python] 백준 20310번 - 타노스 (0) | 2024.06.06 |