블로그에 공부한 내용을 정리하는 분야를 좀 더 늘려보려고 한다.ㅎ
이 문제는 1번에 해결했다!!!
간단하게 설명하면 6개 패키지 묶음의 최솟값과 낱개 최솟값을 구해서 합계를 구해 가장 작은 값을 구하는 문제였다
-> 그래서 아래 3개로 분류 후 MIN으로 가장 작은 값을 구했다
(6개 줄 패키지로 묶인것 X (몫) + 낱개 X (나머지))
vs (전체 개수 X 낱개)
vs ((6개 줄 패키지로 묶인것 X (몫 +1)) 중에서 최솟값을 구해 해결했다.
import sys
#input = sys.stdin.readline()
n,m = map(int,input().split())
packages = [0 for _ in range(m)]
words=[0 for _ in range(m)]
for i in range(m):
p,w = map(int,input().split())
packages[i] = p
words[i]=w
minPackage = min(packages)
minWord = min(words)
sums =[]
a = n//6
b = n%6
sum1 = a*minPackage + b*minWord
sums.append(sum1)
sum2 = (a+1)*minPackage
sums.append(sum2)
sum3 = n*minWord
sums.append(sum3)
print(min(sums))
일단 이 문제는 코드를 구현할 줄 몰라서 답을 봤었다.
알고리즘의 경우 -> 각 꼭짓점을 구해서 같으면 배열에 넣고 그 후 최댓값을 구한 후 제곱해서 출력한다
여기서 점점 answer가 커지게 반복시켜서 구하는 정사각형을 최대한 크게 만들려고 했다.
다 좋았는데 더 구체적으로 구현을 생각했어야했다!!
- 최대 정사각형의 경우 n,m 각각의 세로 가로 길이가 주어졌을 때,
더 작은 길이가 바로 만들 수 있는 정사각형의 크기의 최대였다!
- 각 정사각형의 꼿짓점을 구하고 다음 정사각형으로 넘어가려면
max_width로 for문을 돌려 반복시키기
import sys
input = sys.stdin.readline
N,M = map(int,input().split())
board = [list(map(int,input().strip())) for _ in range(N)]
# 이렇게 적으면 42101이 각각 int형으로 분리 가능
max_width = min(N,M)
answer = 0
for i in range(N):
for j in range(M):
for k in range(max_width):
if (i+k) < N and (j+k) < M and (board[i][j] == board[i+k][j] == board[i][j+k] == board[i+k][j+k]):
answer = max(answer, (k+1)**2)
print(answer)