백준 당일 푼 문제 블로그 정리하기

박경현·2022년 9월 13일
0

블로그에 공부한 내용을 정리하는 분야를 좀 더 늘려보려고 한다.ㅎ

  1. 백준문제
  2. 구름 당일 공부 내용
  3. AI 관련 수업 들
  4. SQL 관련 수업

1049번 문제


생각한 알고리즘

이 문제는 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))

 

1051번 문제


생각한 알고리즘 + 새롭게 이해한 내용

일단 이 문제는 코드를 구현할 줄 몰라서 답을 봤었다.

알고리즘의 경우 -> 각 꼭짓점을 구해서 같으면 배열에 넣고 그 후 최댓값을 구한 후 제곱해서 출력한다
여기서 점점 answer가 커지게 반복시켜서 구하는 정사각형을 최대한 크게 만들려고 했다.

구현할 때 생각할 것

다 좋았는데 더 구체적으로 구현을 생각했어야했다!!

  1. 최대 정사각형의 경우 n,m 각각의 세로 가로 길이가 주어졌을 때,
    더 작은 길이가 바로 만들 수 있는 정사각형의 크기의 최대였다!

  2. 각 정사각형의 꼿짓점을 구하고 다음 정사각형으로 넘어가려면
    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)
profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글