문제
https://www.acmicpc.net/problem/2563
풀이
Paper = [[0 for _ in range(101)] for _ in range(101)]
I = int(input())
Color_Paper = [list(map(int, input().split())) for _ in range(I)]
for i in Color_Paper:
for a in range(i[0], i[0] + 10):
for b in range(i[1], i[1] + 10):
Paper[a][b] = 1
print(sum([Paper[i].count(1) for i in range(101)]))
100X100 사이즈의 도화지 2차원 배열을 만들고, 색종이들의 위치를 기반으로 색종이가 있는 부분을 1로 바꾸어 1의 개수를 출력했음.
삽질
첫번째 시도
I = int(input()) #색종이의 수
Paper_Arr = [[0, 0] for i in range(I)] #색종이의 위치 *2차원 정수 배열
for i in range(I):
Paper_Arr[i][0], Paper_Arr[i][1] = map(int, input().split())
Black = 0
for i in range(max([Paper_Arr[a][0] for a in range(I)]) + 10): #색종이의 세로 정점
for j in range(max([Paper_Arr[b][0] for b in range(I)]) + 10): #색종이의 가로 정점
for k in range(I):
if Paper_Arr[k][0] <= i >= Paper_Arr[k][0] + 10 and Paper_Arr[k][1] <= j >= Paper_Arr[k][1] + 10:
Black += 1
break
print(Black)
이중 for 문으로 무작정 다 확인해봤음.
내가 실수를 해서 답이 똑바로 안 나왔겠지만, 고치는 과정에서 코드가 너무 비효율적인 것 같아 처음부터 다시 풀기로 했음. (3중 for문 쓰면 밥 혼자 먹어야 한다고 해서 겁먹음)
두번째 시도
Paper_Arr = [[0, 0] for i in range(I)] #색종이의 위치 *2차원 정수 배열
for i in range(I):
Paper_Arr[i][0], Paper_Arr[i][1] = map(int, input().split())
Black = 100 * I
Black2 = 0
for a, i in enumerate(Paper_Arr):
for b, j in enumerate(Paper_Arr):
if j[0] <= i[0] and i[0] >= j[0] + 10:
Black2 += (10 - abs(i[0] - j[0])) * (10 - abs(i[1] - j[1]))
Black -= int(Black2 / 2)
print(Black)
이중 for 문을 사용하되, 계산식을 기반으로 코드를 짜 보았음.
하우에버! 두 개 이상 겹치는 색종이의 중복 처리나 복잡한 식에 현기증이 나서 엎어버림.
세번째 시도 (성공)
Paper = [[0 for _ in range(101)] for _ in range(101)]
I = int(input())
Color_Paper = [list(map(int, input().split())) for _ in range(I)]
for i in Color_Paper:
for a in range(i[0], i[0] + 10):
for b in range(i[1], i[1] + 10):
Paper[a][b] = 1
print(sum([Paper[i].count(1) for i in range(101)]))
그 전까지는 색종이의 좌표를 기반으로 계산했는데, 그냥 빈 2차원 배열에 색종이가 있는 좌표를 표시하는 방식으로 중복을 처리했음.
이렇게 코드를 짜더라도 100X100이기 때문에 순식간에 처리될듯.
앞으로는 간단한 문제에 괜히 복잡하게 생각하지 말고 직관적으로 풀이를 해야겠음.
'Algorithm Study' 카테고리의 다른 글
백준 9506번 약수들의 합 (0) | 2024.02.18 |
---|---|
백준 27433번 팩토리얼 2 - Python (0) | 2024.02.18 |
백준 28215번 대피소 - Python (0) | 2024.02.18 |
백준 28214번 크림빵 - Python (0) | 2024.02.18 |
백준 2745 진법 변환 (Python) (0) | 2024.02.18 |
댓글